我必须将以下样式应用于ListViewItem
:
<UserControl.Resources>
<local:Look x:Key="ListViewItemLook" Background="Magenta"/>
<Style x:Key="ListViewItemStyle" TargetType="{x:Type ListViewItem}">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="{Binding Source={DynamicResource ListViewItemLook}, Path=Background}"/>
</Trigger>
</Style.Triggers>
</Style>
但我得到一个例外,我试图改变:
<Setter Property="Background" Value="{Binding Path=Background}"/>
并添加到Style:
<Setter Property="DataContext" Value="{DynamicResource ListViewItemLook}"/>
但是不起作用。我无法绑定到StaticResource,因为我需要设置BackGround属性运行时。
我该怎么办?感谢。
答案 0 :(得分:0)
如果你想要本地:Look和setter引用相同的颜色,请执行一个小的重构:
将颜色拉出到单独的SolidColorBrush中并使两个项目都引用它:
<SolidColorBrush x:Key="SelectedListViewItemBackground" Color="Magenta" />
<local:Look x:Key="whatever" Background="{StaticResource SelectedListViewItemBackground}" />
<Setter Property="Background" Value="{StaticResource SelectedListViewItemBackground}" />
如果你正在尝试做别的事情,我无法弄清楚它是什么,因为这个问题没有意义。
答案 1 :(得分:0)
据我所知,DynamicResource扩展使用DependencyProperty机制(非常像绑定)。因此,您无法使用DynamicResource设置Binding对象的Source属性,因为它不是DependencyProperty。
此外,如果要更改Look的Background属性,而不是资源中的Look本身;然后将Look作为静态资源设置为绑定属性应该不是问题。当然,Look类的Background属性应该触发PropertyChanged事件或者是DependencyProperty本身。