使用带绑定的触发器?

时间:2011-04-27 17:00:42

标签: c# .net wpf triggers binding

这是我昨天发布的问题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可能是我的下一个头痛。必须有办法做到这一点,对吗?

2 个答案:

答案 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)。