C# 将触发器与绑定一起使用?
这是我昨天发布的一个问题的后续内容。使用H.B.发布的代码片段,绑定到图标是可行的,但我似乎不知道如何向其添加触发条件,以便在鼠标上方显示不同的图标。当前代码如下所示:C# 将触发器与绑定一起使用?,c#,.net,wpf,triggers,binding,C#,.net,Wpf,Triggers,Binding,这是我昨天发布的一个问题的后续内容。使用H.B.发布的代码片段,绑定到图标是可行的,但我似乎不知道如何向其添加触发条件,以便在鼠标上方显示不同的图标。当前代码如下所示: xmlns:res="clr-namespace:MyProject.Resources" xmlns:Helpers="clr-namespace:MyProject.Converters" ... <Image Name="imgMin" Grid.Column="
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>
xmlns:res=“clr命名空间:MyProject.Resources”
xmlns:Helpers=“clr名称空间:MyProject.Converters”
...
我需要在此处更改什么,以便在鼠标上方显示不同的图标(res:AppResources.minimize_glow)?我试图在某个地方搞乱触发器,但Image.Source不接受另一个子项,绑定不支持直接内容,将Image.Source更改为Image.Style不起作用,因为样式不能包含绑定。。。我在这里的想法快用完了,而我的Google fu也没能提供任何有用的东西。此外,即使我可以使用触发器来处理这个问题,将高亮显示图标的绑定放到触发器中也可能是我下一个头疼的问题。必须有办法做到这一点,对吗?您可以添加带有触发器和setter的样式,以便在鼠标悬停在图像上时用新的图像源替换图像源。请记住,如果直接在图像上设置属性,则样式中的任何setter都将无效。这就是我们在样式中使用默认setter的原因。我目前没有VisualStudio可用,因此无法进行测试,但希望该代码片段能够指导您
<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>
当鼠标悬停在图像上时,您可以添加带有触发器和setter的样式,以将图像源替换为新的图像源。请记住,如果直接在图像上设置属性,则样式中的任何setter都将无效。这就是我们在样式中使用默认setter的原因。我目前没有VisualStudio可用,因此无法进行测试,但希望该代码片段能够指导您
<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库中的行为/触发器,您可以在expression blend目录中找到该库 这些触发器/行为可以放在任何元素的子元素之外,因为它们本身不是UI元素 然后,您可以创建一个附加到MouseEnter、MouseLeave事件的行为,并根据需要更改图像 您可以看到这样一个示例(查看鼠标悬停行为):
(Post适用于silverlight,但也适用于wpf)。您可以使用System.Windows.Interactive.dll库中的行为/触发器,您可以在expression blend目录中找到该库 这些触发器/行为可以放在任何元素的子元素之外,因为它们本身不是UI元素 然后,您可以创建一个附加到MouseEnter、MouseLeave事件的行为,并根据需要更改图像 您可以看到这样一个示例(查看鼠标悬停行为):
(该帖子适用于silverlight,但也适用于wpf)。完美!这正是我所需要的。非常感谢。完美的这正是我所需要的。非常感谢。