我有一个包含一些项目的列表框。选择项目后,我想更改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>
然后我得到了这个结果:
我需要更改usercontrol的背景,而不是listboxitem的背景。
答案 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.在用户控件中,将按钮背景颜色设置为该依赖项属性。