这是我昨天发布的问题here的后续跟进。绑定到图标工作,使用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)?我试图在那里搞一个触发器,但Image.Source不接受另一个子,Binding不支持直接内容,将Image.Source更改为Image.Style不起作用,因为Style不能包含Binding ..我这里的想法已经不多了,我的Google-fu没有提出任何有用的东西。此外,即使我可以使用Trigger来处理这个问题,将突出显示的图标绑定到Trigger可能是我的下一个头痛。必须有办法做到这一点,对吗?
答案 0 :(得分:1)
当鼠标悬停在图像上时,您可以添加带有触发器和设置器的样式,以使用新的图像源替换图像源。请记住,如果直接在图像上设置属性,则样式中的任何setter都将无效。这就是为什么我们在样式中有默认的setter。我目前没有可用的视觉工作室,所以我无法测试,但希望该片段能够指导你。
<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>
答案 1 :(得分:0)
您可以使用 System.Windows.Interactivity.dll 库中的行为/触发器,您可以在表达式混合目录中找到它。
这些触发器/行为可以放在任何元素的子元素之外,因为它们本身不是UI元素。
然后,您可以创建一个附加到MouseEnter,MouseLeave事件的行为,并根据需要更改图像。
您可以看到完成此操作的示例(查看鼠标悬停行为):http://www.silverlightshow.net/items/Behaviors-and-Triggers-in-Silverlight-3.aspx
(Post适用于silverlight,但也适用于wpf)。