zoukankan      html  css  js  c++  java
  • 使用触发器定义 WPF 控件的行为

    Expression Studio 4.0
     
    此主题尚未评级 - 评价此主题
     

    此页仅适用于 WPF 项目

    在应用程序的生命周期中,用户界面中对象的状态会发生改变。通常以面向用户的术语来表述状态。例如,按钮的“鼠标悬停”状态或菜单项的“按下”状态。这两个示例状态是分别使用 UIElement.IsMouseOver 属性和 MenuItem.IsPressed 属性在对象上实现的。

    但对用户而言,这些属性的值及其代表的状态不是可见的。 IsMouseOverIsPressed 都不是可视属性。为了观察这些属性,非可视属性的更改必须触发可视属性(如 BackgroundOpacity )的更改。例如,原本平整的按钮会在变为“鼠标悬停”状态后凹下去;菜单项也会在“按下”时更改背景颜色。

    除了更改状态以外,对象还会引发事件。例如,当指针越过按钮边界时,将引发 MouseEnterMouseLeave 事件。同样地,事件本身也没有可视外观,因此它必须触发可视属性的更改,才能被用户注意到。

    可以在文档的根元素中或者在应用于控件的样式中创建触发器(和动画时间线)。例如,可以修改按钮的样式,以便在按钮的“按下”和“变换”状态更改时,按钮的外观能发生细微变化。应用了该样式的任何按钮都会有相同的行为。有关示例,请参阅动手试验:向按钮添加动画

    有两种触发器:

    • 属性触发器    通过此机制,一个属性的更改会在另一个属性中触发即时或动态更改。

    • 事件触发器    通过此机制,事件会在属性中触发动态更改。

    下图显示了触发器用户界面,其中包含两个属性触发器( IsMouseOverIsPressed )以及一个事件触发器 ( target-element.Loaded )。 IsMouseOver 属性触发器处于选定状态,表示已更改的属性 ( Border.Background ) 和触发的时间线 ( OnLoaded1 )。

    Cc294856.796fe3b0-6e25-43eb-aed6-2ac834fe40e4(zh-cn,Expression.40).png

    有关使用触发器的示例,请参阅在 WPF 控件中添加或删除触发器创建简单动画

    属性触发器

    属性触发器将定义触发“条件” 以及满足该条件时应该执行的操作。“button1 的 IsMouseOver 属性为 true”便是一个条件示例。操作的示例包括“将 button1 的 Foreground 属性设置为 Red 和开始运行名为 Expand 的动画以将按钮放大”。

    “将 Foreground 设置为 Red”是一种名为“属性资源库” 操作的示例。设置器仅在满足条件时才会生效;如果不再满足条件,该属性将还原为以前的值。“开始运行名为 Expand 的动画”是 进入操作 的一个示例;该操作将在满足条件时执行。如果不再满足条件,则执行 退出操作 。进入或退出操作只可以控制动画。下图显示了此属性触发器示例的生命周期。

    Cc294856.e82c8455-215e-49da-954f-f1bb73d84af2(zh-cn,Expression.40).png

    请注意,资源库可在其整个生命周期中控制 Foreground 属性。到第 5 阶段时, Foreground 将再次自动设置回 Black。但是,由进入操作执行的任何属性动画都不会撤消。到第 5 阶段时,按钮仍然放到为一个较大的大小。该解决方案旨在设计一个 Contract 动画以便再次缩小按钮,然后在退出操作中开始运行此新动画。

    只能在样式或模板中定义属性触发器,不过通常对于触发器而言,最佳做法是尽可能将属性触发器放到模板中。

    事件触发器

    事件触发器定义了触发条件以及满足该条件时应该执行的操作。“在引发 button1 的 MouseEnter 事件时”便是一个条件示例。操作的示例包括“开始运行名为 Expand 的动画以将按钮放大”。

    示例操作与前面在属性触发器示例中使用的进入操作相同。事件触发器与属性触发器的生命周期不同,它仅运行操作来响应事件。因此,事件触发器没有进入操作和退出操作之分,而只有操作。

    如果希望在指针进入按钮边界时放大按钮,然后在指针离开其边界时还原到正常大小,则必须定义一对可运行互补缩放动画的事件触发器。可以在样式、模板或 LayoutRoot 中定义事件触发器。

    使用属性触发器还是事件触发器?

    通常,一个属性与一组相应的事件相对应,您可以决定是设计一个属性触发器,还是设计两个事件触发器。例如,可以使用 IsMouseOver 属性触发器,或者成对使用 MouseEnterMouseLeave 事件触发器来实现相同的效果。应尽可能使用属性触发器,而在不得不使用事件触发器时才使用它(例如,未使用样式或模板时)。在确实需要使用事件触发器时,为了补偿缺少的设置器,可以创建一对在 0 秒处包含关键帧的动画。

    使用触发器还是事件处理程序方法?

    使用事件处理程序不仅能完成触发器可以执行的所有任务,而且还可以添加其他任何编程逻辑,例如,设置另一个元素的属性、加载新文档、创建新元素等。这是因为事件处理程序方法是在文档的代码隐藏文件中以 C# 或 Microsoft Visual Basic .NET 语言定义的。有关详细信息,请参阅编写将对事件做出响应的代码

    有关可通过使用触发器或事件处理程序方法挂钩到的事件的列表,请参阅 控件、属性和事件参考

    另请参阅

    Microsoft Corporation 版权所有 ⓒ 2011。保留所有权利。
  • 相关阅读:
    OSPF
    【今日CS 视觉论文速览】 24 Jan 2019
    【今日CS 视觉论文速览】Wed, 23 Jan 2019
    【今日CS 视觉论文速览】 21 Jan 2019
    【Processing学习笔记】安装与入门
    【今日CS 视觉论文速览】Part2, 18 Jan 2019
    【今日CS 视觉论文速览】Fri, 18 Jan 2019
    【今日CS 视觉论文速览】Thu, 17 Jan 2019
    【今日CS 视觉论文速览】Part2, 16 Jan 2019
    【今日CS 视觉论文速览】Wed, 16 Jan 2019
  • 原文地址:https://www.cnblogs.com/changbaishan/p/3418335.html
Copyright © 2011-2022 走看看