应该更改Image.Source属性的Image上的DataTrigger不起作用

时间:2015-06-04 18:46:27

标签: c# wpf image binding datatrigger

我转载了question/answer,如下所示:

            <Button Command="Play" ToolTip="Execute Macro">
                <Image DataContext="{Binding ElementName=UserControlMacroEdit}" Source="/ParametricStudySharedGui;component/Image/arrowRight32x32.png" Height="24" Width="24">
                    <Image.Style>
                        <Style TargetType="{x:Type Image}">
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding IsMacroRunning, Converter={StaticResource FakeTransparentConverter}, Mode=OneWay}" Value="True">
                                    <DataTrigger.Setters>
                                        <Setter Property="Source" Value="/ParametricStudySharedGui;component/Image/Run24.png"></Setter>
                                        <Setter Property="Opacity" Value=".5"></Setter>
                                    </DataTrigger.Setters>
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </Image.Style>
                </Image>
            </Button>

然而,有一种奇怪的行为。 “不透明度”发生了变化,但图像本身保持不变。看起来我无法从DataTrigger修改Image.Source。为什么呢?

1 个答案:

答案 0 :(得分:1)

由于处理依赖项属性的方式,原始代码不起作用。特别是,因为它们可以从多个地方设置,所以WPF实现了&#34; priority&#34;对于这样的属性。 &#34;在当地设置&#34;属性(即它们被设置为XAML中元素声明的一部分)具有比样式中找到的任何setter更高的优先级。

有关详细信息,请参阅Dependency Property Value Precedence

您可以通过初始化Source本身中的Style属性来解决此问题,而不是Image声明的一部分:

            <Image DataContext="{Binding ElementName=UserControlMacroEdit}" Height="24" Width="24">
                <Image.Style>
                    <Style TargetType="{x:Type Image}">
                        <Setter Property="Source" Value="/ParametricStudySharedGui;component/Image/arrowRight32x32.png"></Setter>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding IsMacroRunning, Converter={StaticResource FakeTransparentConverter}, Mode=OneWay}" Value="True">
                                <DataTrigger.Setters>
                                    <Setter Property="Source" Value="/ParametricStudySharedGui;component/Image/Run24.png"></Setter>
                                    <Setter Property="Opacity" Value=".5"></Setter>
                                </DataTrigger.Setters>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Image.Style>
            </Image>