1

我想根据动态资源的值切换控件样式。

<Image x:Name="leftImg" Stretch="Fill" Style="{StaticResource BookendImageStyle}" >
    <Image.Triggers>
        <DataTrigger Binding="{DynamicResource BlackAndWhite}" Value="True">
            <Setter TargetName="leftImg" Property="Style" Value="{StaticResource BookendImageStyleBW}" />
        </DataTrigger>
    </Image.Triggers>
</Image>

这编译得很好,但在运行时我得到以下异常:

A 'DynamicResourceExtension' cannot be set on the 'Binding' property of type 'DataTrigger'. A 'DynamicResourceExtension' can only be set on a DependencyProperty of a DependencyObject.

我试图做的事情可能吗?我只是有错误的语法吗?我应该以不同的方式来做吗?

编辑 我已将代码更改为:

<DataTemplate x:Key="ViasTemplate">
                    <StackPanel Orientation="Horizontal">
                        <Border Padding="{Binding ElementName=templateTest, Path=DataContext.GridRow.LeftBondIndent}" Width="50">
                            <Image x:Name="leftImg" Stretch="Fill" Style="{StaticResource BookendImageStyle}" >
                                <Image.Triggers>
                                    <DataTrigger Binding="{Binding Source={StaticResource BlackAndWhite}}" Value="True">
                                        <Setter TargetName="leftImg" Property="Style" Value="{StaticResource BookendImageStyleBW}" />
                                    </DataTrigger>
                                </Image.Triggers>
                            </Image>

但现在得到这个例外:

Triggers collection members must be of type EventTrigger

谢谢

4

1 回答 1

1
  <Image x:Name="leftImg" Stretch="Fill" Style="{StaticResource BookendImageStyle}" >
        <Image.Triggers>
            <DataTrigger Binding="{Binding Source={DynamicResource BlackAndWhite}}" Value="True">
                <Setter TargetName="leftImg" Property="Style" Value="{StaticResource BookendImageStyleBW}" />
            </DataTrigger>
        </Image.Triggers>
    </Image>

当然,您应该将此触发器移至图像样式。DataTrigger 只能在样式或模板中定义

于 2013-03-20T13:31:55.233 回答