我转载了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。为什么呢?
答案 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>