使用带有绑定的触发器

本文关键字:触发器 绑定 | 更新日期: 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)。