wpf列表框复选框在选中或选中时更改颜色

时间:2011-03-31 08:14:04

标签: wpf checkbox listbox selecteditem listitem

我在这个网站上尝试过不同的例子,让列表框/复选框组合从选中的默认灰色更改为另一种颜色无效。

我最终要做的是,如果选中该项目,背景将为白色,未选中时将显示为灰色。

以下是我所拥有的,我们将不胜感激。

将资源更新为以下评论。

控件已更新为回复但仍然无效,有任何想法吗?

<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 个答案:

答案 0 :(得分:3)

我的示例不使用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=TrueIsSelected=False。 要完成此示例,请将这些画笔添加到Resources集合:

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

最好编辑ListViewItem的标准样式,但我无法在互联网上找到它,现在我没有Expression Blend。

结果屏幕: enter image description here