应该更改 Image.Source 属性 的图像上的 DataTrigger 不起作用
DataTrigger on an Image that should change the Image.Source property does not work
我将此 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>
但是,有一个奇怪的行为。
"Opacity" 已更改,但图像本身保持不变。看起来我无法从 DataTrigger 修改 Image.Source。为什么?
由于依赖属性的处理方式,您的原始代码无法正常工作。特别是,由于可以从多个位置设置它们,WPF 为此类属性实现了 "priority" 的想法。 "Locally set" 属性(即它们被设置为 XAML 中元素声明的一部分)比样式中的任何 setter 具有更高的优先级。
详情请见Dependency Property Value Precedence。
您可以通过在 Style
本身中初始化 Source
属性 而不是作为 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>
我将此 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>
但是,有一个奇怪的行为。 "Opacity" 已更改,但图像本身保持不变。看起来我无法从 DataTrigger 修改 Image.Source。为什么?
由于依赖属性的处理方式,您的原始代码无法正常工作。特别是,由于可以从多个位置设置它们,WPF 为此类属性实现了 "priority" 的想法。 "Locally set" 属性(即它们被设置为 XAML 中元素声明的一部分)比样式中的任何 setter 具有更高的优先级。
详情请见Dependency Property Value Precedence。
您可以通过在 Style
本身中初始化 Source
属性 而不是作为 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>