флажок wpf listbox меняет цвет, когда установлен или выбран - PullRequest
1 голос
/ 31 марта 2011

Я пробовал различные примеры на этом сайте, чтобы получить список со списком / флажок, чтобы изменить из серого по умолчанию при выборе на другой цвет безрезультатно.

В конце концов, я пытаюсь сделать, если элемент отмечен, фон будет белым, а при снятии флажка - серым.

Вот что у меня есть, и любая помощьбудет признателен.

Обновить ресурс до комментария ниже.

Элемент управления обновлен до ответа и все еще не работает, какие-либо идеи?

<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
            ItemsSource="{Binding}" 
            Name="lstSwimLane" SelectionMode="Multiple"
            Width="auto" 
            Height="auto"
            Background="Transparent"
            BorderThickness="0" 
            SelectionChanged="LstSwimLaneSelectionChanged">

    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel IsItemsHost="True" />
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>

    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="IsSelected" Value="{Binding Path=IsChecked, Mode=TwoWay}" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListBoxItem">
                        <Border x:Name="Border" SnapsToDevicePixels="true">
                            <ContentPresenter />
                        </Border>

                        <ControlTemplate.Triggers>
                            <Trigger Property="IsSelected" Value="True">
                                <Setter TargetName="Border" Property="Background" Value="{StaticResource SelectedBrush}"/>
                            </Trigger>
                            <Trigger Property="IsSelected" Value="False">
                                <Setter TargetName="Border" Property="Background" Value="{StaticResource UnselectedBrush}"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListBox.ItemContainerStyle>

    <ListBox.ItemTemplate>                                    
        <DataTemplate>
            <StackPanel Orientation="Horizontal" Margin="3,3,3,3">
                <CheckBox IsChecked="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}, Path=IsSelected}"
                                Checked="ChkFilterChecked" 
                                Unchecked="ChkFilterUnchecked" 
                                VerticalAlignment="Center" 
                                Margin="0,0,4,0" />
                <TextBlock Text="{Binding Value}" VerticalAlignment="Center" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Примечание: Отмеченные флажки и комбинация элементов списка остаются серыми, а непроверенная - белым.

Прикрепленный снимок экрана, который соответствует ответу, представленному ниже.Я в тупике.

screen shot

Вот прямая ссылка, чтобы увеличить изображение.
http://s1120.photobucket.com/albums/l489/nitefrog/?action=view&current=jw_0012011-03-311325.jpg

Вот снимок экрана с флажками.

enter image description here

http://i1120.photobucket.com/albums/l489/nitefrog/jw_0022011-03-311345.jpg

Даже если кисти установлены, по какой-то причине они не запускаются.

enter image description here

Есть идеи?

Спасибо.

1 Ответ

3 голосов
/ 31 марта 2011

Мой пример не использует стиль myListboxStyle, вы можете удалить его.Но измените свойство ItemContainerStyle:

        <ListBox.ItemContainerStyle>
            <Style TargetType="ListBoxItem">
                <Setter Property="IsSelected" Value="{Binding Path=IsChecked, Mode=TwoWay}" />
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="ListBoxItem">
                            <Border x:Name="Border" SnapsToDevicePixels="true">
                                <ContentPresenter />
                            </Border>

                            <ControlTemplate.Triggers>
                                <Trigger Property="IsSelected" Value="True">
                                    <Setter TargetName="Border" Property="Background" Value="{StaticResource SelectedBrush}"/>
                                </Trigger>
                                <Trigger Property="IsSelected" Value="False">
                                    <Setter TargetName="Border" Property="Background" Value="{StaticResource UnselectedBrush}"/>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </ListBox.ItemContainerStyle>

Это очень простой шаблон, в котором есть только два триггера: IsSelected=True и IsSelected=False.И чтобы завершить этот пример, добавьте эти кисти в коллекцию Resources:

    <SolidColorBrush x:Key="SelectedBrush" Color="White"/>
    <SolidColorBrush x:Key="UnselectedBrush" Color="Gray"/>

Было бы лучше отредактировать стандартный стиль для ListViewItem, но я не могу найти его в интернете иУ меня нет сейчас Expression Blend.

Экран с результатом: enter image description here

...