DynamicResource抛出异常

时间:2012-10-01 20:04:11

标签: c# wpf binding

我必须将以下样式应用于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属性运行时。

我该怎么办?感谢。

2 个答案:

答案 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本身。