Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将触发器与绑定一起使用?_C#_.net_Wpf_Triggers_Binding - Fatal编程技术网

C# 将触发器与绑定一起使用?

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

这是我昨天发布的一个问题的后续内容。使用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>
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)。

完美!这正是我所需要的。非常感谢。完美的这正是我所需要的。非常感谢。