在列表框中更改所选用户控件的背景颜色

时间:2013-11-13 16:07:30

标签: wpf listbox

我有一个包含一些项目的列表框。选择项目后,我想更改UserControlButton的背景颜色。

我该怎么做?

<Window.Resources>
    <Style x:Key="ListBoxItemStyle" TargetType="{x:Type ListBoxItem}">
        <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
    </Style>
</Window.Resources>

<Border x:Name="UserScrollContainer">
       <ListBox x:Name="UserContainer" ItemsSource="{Binding allUserViewModel.Users}" 
                             Background="Transparent"   
                             HorizontalContentAlignment="Stretch"
                             ScrollViewer.HorizontalScrollBarVisibility="Hidden" 
                             ScrollViewer.VerticalScrollBarVisibility="Visible"
                             BorderThickness="0" Margin="0" Padding="0"    
                             ItemContainerStyle="{DynamicResource ListBoxItemStyle}">

            <ListBox.ItemTemplate>
                 <DataTemplate>
                      <local:UserControlButton x:Name="UserControlButton" />   
                                // Change background color depending if it is selected
                  </DataTemplate>
            </ListBox.ItemTemplate>
      </ListBox>
</Border>     

修改

我知道我可以添加这样的东西:

        <Style x:Key="ListBoxItemStyle" TargetType="{x:Type ListBoxItem}">
        <Setter Property="FocusVisualStyle" Value="{x:Null}"/>

        <Setter Property="Background" Value="Lightblue"/>
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="true">
                <Setter Property="Background" Value="Red"/>
            </Trigger>
            <Trigger Property="IsMouseOver" Value="true">
                <Setter Property="Background" Value="Yellow"/>
            </Trigger>
        </Style.Triggers>
    </Style>

然后我得到了这个结果:

enter image description here

我需要更改usercontrol的背景,而不是listboxitem的背景。

2 个答案:

答案 0 :(得分:5)

您有几种方法可以解决您的问题。其中一个我将在这里描述。

您可以在<Style />上定义<UserContorl />,以反映ListBoxItem.IsSelected属性:

<DataTemplate>
    <local:UserControlButton x:Name="UserControlButton">
        <local:UserControlButton.Style>
            <Style TargetType="{x:Type local:UserControlButton}">
                <Setter Property="Background" Value="Lightblue"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListBoxItem}}" Value="true">
                        <Setter Property="Background" Value="Red"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </local:UserControlButton.Style>
    </local:UserControlButton>
</DataTemplate>

答案 1 :(得分:0)

您必须将用户控件的datacontext设置为等于所选项目。并且必须使用转换器将所选值转换为背景。

假设你有这样的用户控制:

    <UserControl x:Class="ArdonorDemonstration.UserControlButton" >
    <Button Content="{Binding}"
               x:Name="btnUC" Background="{Binding}"></Button>
</UserControl>

你必须设置

<ListBox.ItemTemplate> 
                <DataTemplate>
                    <local:UserControlButton x:Name="UserControlButton"
                                             DataContext="{Binding}" /> 
                </DataTemplate>

如果你想要制作所选的项目,那么, 1.在用户控制中暴露一个依赖性。 2.将ListBox ItemTemplate内部设置为SelectedItem。 3.在用户控件中,将按钮背景颜色设置为该依赖项属性。