【问题标题】:Using triggers with bindings?使用带绑定的触发器?
【发布时间】:2011-04-27 17:00:41
【问题描述】:

这是我昨天here 发布的问题的后续。使用 H.B. 发布的 code-sn-p 绑定到图标有效,但我似乎无法弄清楚如何向其添加触发条件,以便在鼠标悬停时显示不同的图标。当前代码如下所示:

    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 也没有想出任何有用的东西。此外,即使我可以让触发器使用它,将一个绑定到突出显示的图标放入触发器可能是我的下一个头痛。必须有办法做到这一点,对吧?

【问题讨论】:

    标签: c# .net wpf triggers binding


    【解决方案1】:

    您可以添加带有触发器和设置器的样式,以便在鼠标悬停在图像上时将图像源替换为新的图像源。请记住,如果您直接在图像上设置属性,则样式中的任何设置器都将无效。这就是为什么我们在样式中有默认设置器。我目前没有可用的 Visual Studio,因此无法进行测试,但希望 sn-p 能够指导您。

    <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>
    

    【讨论】:

    • 完美!这正是我所需要的。谢谢!
    【解决方案2】:

    您可以使用 System.Windows.Interactivity.dll 库中的行为/触发器,您可以在表达式混合目录中找到该库。

    这些触发器/行为可以放在任何元素的子元素之外,因为它们本身不是 UI 元素。

    然后您可以创建一个附加到 MouseEnter、MouseLeave 事件的行为,并根据您的需要更改图像。

    您可以看到这样做的示例(查看鼠标悬停行为):http://www.silverlightshow.net/items/Behaviors-and-Triggers-in-Silverlight-3.aspx

    (帖子适用于 silverlight,但也适用于 wpf)。

    【讨论】:

      猜你喜欢
      • 2012-09-18
      • 1970-01-01
      • 2021-07-29
      • 1970-01-01
      • 1970-01-01
      • 2018-02-02
      • 2016-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多