1

我必须将以下样式应用于我的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}"/>

并添加到样式:

<Setter Property="DataContext" Value="{DynamicResource ListViewItemLook}"/>

但是是行不通的。我无法绑定到 StaticResource,因为我需要设置 BackGround 属性运行时。

我该怎么办?谢谢。

4

2 回答 2

0

如果您希望 local:Look 和 setter 都引用相同的颜色,请执行一个小的重构:

将颜色拉出到单独的 SolidColorBrush 中并让两个项目都引用它:

<SolidColorBrush x:Key="SelectedListViewItemBackground" Color="Magenta" />
<local:Look x:Key="whatever" Background="{StaticResource SelectedListViewItemBackground}" />
<Setter Property="Background" Value="{StaticResource SelectedListViewItemBackground}" />

如果您尝试做其他事情,我无法弄清楚它是什么,因为这个问题没有意义。

于 2012-10-01T21:10:46.410 回答
0

据我所知,DynamicResource 扩展使用 DependencyProperty 机制(很像绑定)。因此,您不能使用 DynamicResource 设置 Binding 对象的 Source 属性,因为它不是 DependencyProperty。

另外,如果你想改变 Look 的 Background 属性而不是资源中的 Look 本身;那么将 Look 设置为绑定属性的静态资源应该不是问题。当然 Look 类的 Background 属性应该触发 PropertyChanged 事件或者是 DependencyProperty 本身。

于 2012-10-02T16:57:46.097 回答