WPF:属性触发器

来源:互联网 发布:芜湖淘宝主播招聘 编辑:程序博客网 时间:2024/06/07 04:24
无论何时,只要依赖属性的值改变了,WPF就会自动根据属性的元数据(metadata)触发一系列动作。这些动作可以重新呈现适当的元素、更新当前布局、刷新数据绑定等。内建的变更通知最有趣的特性之一是属性触发器,它可以在属性值改变时执行自定义动作,而不用更改任何过程式代码。

       例:为一个按钮设置属性:在鼠标指针移上去时按钮上的字变为蓝色。

如果没有属性触发器的话,你得为每个Button添加两个事件处理程序,一个是为MouseEvent事件准备的,一个是为MouseLeave事件准备的。

[html] view plaincopy
  1. <Button MouseEnter="Button_MouseEnter" MouseLeave="Button_MouseLeave"  MinWidth="75" Margin="10">Help</Button>  
在相应的隐藏代码中添加如下事件处理:

[csharp] view plaincopy
  1. // 当鼠标进入按钮区域时,改变foreground为蓝色  
  2. void Button_MouseEnter(object sender, MouseEventArgs e)  
  3. {  
  4.     Button b = sender as Button;  
  5.     if (b != null)  
  6.     {  
  7.         b.Foreground = Brushes.Blue;  
  8.     }  
  9. }  
  10.   
  11. // 当鼠标离开按钮区域时,恢复foreground为黑色  
  12. void Button_MouseLeave(object sender, MouseEventArgs e)  
  13. {  
  14.     Button b = sender as Button;  
  15.     if (b != null)  
  16.     {  
  17.         b.Foreground = Brushes.Black;  
  18.     }  
  19. }  

然而,有了属性触发器,你可以完全在XAML中完成相同的行为。下面Trigger对象就是需要写的所有代码:(红色部位为将该该属性触发器通过style对象应用到Button上去)

[html] view plaincopy
  1. <pre name="code" class="html"><Button MinWidth="75" Margin="10">  
  2.                 Help  
  3.                 <Button.Style>  
  4.                     <Style TargetType="{x:Type Button}">  
  5.                         <Style.Triggers>  
  6.                         <Trigger Property="IsMouseOver" Value="True">  
  7.                             <Setter Property="Foreground" Value="Blue"/>  
  8.                         </Trigger>  
  9.                         </Style.Triggers>  
  10.                     </Style>  
  11.                 </Button.Style>  
  12.             </Button></pre>  
  13. <pre></pre>  
  14. 这个触发器能够基于Button的IsMouseOver属性工作,当MouseEnter触发时,IsMouseOver属性会变为true;在MouseLeave触发时,它又变为false。注意,当IsMouseOver变为false时,不用把Foregound变为黑色,这是WPF自动完成的!<br>  
  15. <p></p> 
0 0
原创粉丝点击