使用带有绑定的触发器
本文关键字:触发器 绑定 | 更新日期: 2023-09-27 17:53:33
这是我昨天在这里发布的一个问题的后续问题。绑定到图标工作,使用h.b.发布的代码片段,但我似乎不知道如何添加一个触发条件,以便在鼠标悬停时显示不同的图标。当前代码如下所示:
xmlns:res="clr-namespace:MyProject.Resources"
xmlns:Helpers="clr-namespace:MyProject.Converters"
...
<Image Name="imgMin"
Grid.Column="0"
Stretch="UniformToFill"
Cursor="Hand"
MouseDown="imgMin_MouseDown">
<Image.Source>
<Binding Source="{x:Static res:AppResources.minimize}">
<Binding.Converter>
<Helpers:IconToImageSourceConverter/>
</Binding.Converter>
</Binding>
</Image.Source>
</Image>
我需要在这里改变什么,以便在鼠标上方显示不同的图标(res:AppResources.minimize_glow) ?我试过在里面装个扳机,但是。源不接受另一个子,绑定不支持直接内容,更改图像。图片来源。样式不能工作,因为样式不能包含绑定…我的想法已经不多了,我的Google-fu也没能想出任何有用的东西。此外,即使我可以使用触发器来处理这个问题,将绑定到突出显示的图标放入触发器可能是我的下一个头痛问题。一定有办法的,对吧?
您可以使用触发器和setter来添加样式,以便在鼠标位于图像上方时将图像源替换为新的图像源。记住,如果你直接在图像上设置属性,样式中的任何setter都将不起作用。这就是为什么我们在样式中使用默认设置器的原因。我现在没有visual studio可用,所以我不能测试,但希望这个片段能指导你。
<Image Name="imgMin"
Grid.Column="0"
Stretch="UniformToFill"
Cursor="Hand"
MouseDown="imgMin_MouseDown">
<Image.Style>
<Style>
<Style.Resources>
<Helpers:IconToImageSourceConverter x:Key="IconToImageSourceConverter"/>
</Style.Resources>
<Setter Property="Image.Source">
<Setter.Value>
<Binding Source="{x:Static res:AppResources.minimize}"
Converter="{StaticResource IconToImageSourceConverter}"/>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Image.IsMouseOver" Value="True">
<Setter Property="Image.Source">
<Setter.Value>
<Binding Source="{x:Static res:AppResources.minimize_glow}"
Converter="{StaticResource IconToImageSourceConverter}"/>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
您可以使用 system . windows . interactive .dll库中的行为/触发器,该库可以在表达式混合目录中找到。
这些触发器/行为可以放在任何元素的子元素之外,因为它们本身不是UI元素。
然后你可以创建一个附加到MouseEnter, MouseLeave事件的行为,并相应地改变你想要的图像。
你可以看到这样做的一个例子(看看鼠标在行为):http://www.silverlightshow.net/items/Behaviors-and-Triggers-in-Silverlight-3.aspx
(Post适用于silverlight,但也适用于wpf)。