2011-04-27 47 views
1

这是一个后续问题我昨天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不能包含绑定。我在这里用完了想法,而我的Google-fu没有提出任何有用的东西。另外,即使我能得到一个触发器来处理这个问题,将突出显示的图标绑定到触发器也可能是我的下一个头痛问题。必须有一种方法来做到这一点,对吧?

回答

1

您可以触发一个二传手以崭新的形象源更换图像源,而鼠标在图像合成添加样式。请记住,如果直接在图像上设置属性,则样式中的任何设置器都不起作用。这就是为什么我们在样式中有默认设置器的原因。我目前没有可用的视觉工作室,所以我无法测试,但希望该片段能够引导您。从System.Windows.Interactivity.dll库,你可以在你的Expression Blend目录中找到

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

完美!这正是我所需要的。谢谢! – Swooper 2011-04-27 17:35:14

0

你可以使用行为/触发器。

这些触发器/行为除了可以任意元素的子放,因为它们本身并不是UI元素。

然后,你可以创建一个附加到的MouseEnter,鼠标离开事件的行为,并相应改变图像你想要什么。

你可以看到这个正在做一个例子(看看鼠标的行为):http://www.silverlightshow.net/items/Behaviors-and-Triggers-in-Silverlight-3.aspx

(Post是为Silverlight,但会为WPF工作也)。