WPF:属性触发器

        无论何时,只要依赖属性的值改变了,WPF就会自动根据属性的元数据(metadata)触发一系列动作。这些动作可以重新呈现适当的元素、更新当前布局、刷新数据绑定等。内建的变更通知最有趣的特性之一是属性触发器,它可以在属性值改变时执行自定义动作,而不用更改任何过程式代码。

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

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

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

    // 当鼠标进入按钮区域时,改变foreground为蓝色
    void Button_MouseEnter(object sender, MouseEventArgs e)
    {
        Button b = sender as Button;
        if (b != null)
        {
            b.Foreground = Brushes.Blue;
        }
    }

    // 当鼠标离开按钮区域时,恢复foreground为黑色
    void Button_MouseLeave(object sender, MouseEventArgs e)
    {
        Button b = sender as Button;
        if (b != null)
        {
            b.Foreground = Brushes.Black;
        }
    }

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

<Button MinWidth="75" Margin="10">
                Help
                <Button.Style>
                    <Style TargetType="{x:Type Button}">
                        <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Foreground" Value="Blue"/>
                        </Trigger>
                        </Style.Triggers>
                    </Style>
                </Button.Style>
            </Button>

这个触发器能够基于Button的IsMouseOver属性工作,当MouseEnter触发时,IsMouseOver属性会变为true;在MouseLeave触发时,它又变为false。注意,当IsMouseOver变为false时,不用把Foregound变为黑色,这是WPF自动完成的!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值