WPF控件应用[2]

原文来自MSDN

自定义按钮行为

此时,您已通过编辑按钮模板自定义了该按钮的表示形式,但该按钮并不像典型按钮那样对用户操作做出响应(例如,在鼠标悬停、接收焦点
和单击时更改外观)。下面两个过程将说明如何将类似这样的行为生成到自定义按钮中。我们将从简单的属性触发器开始,然后添加事件触发
器和动画。

设置属性触发器

1.  创建新的属性触发器 :选择“glassCube”,单击 “触发器”面板中的“+ 属性”
2. (参见下一步后面的图示)。这样可创建一个默认属性触发器。
将  IsMouseOver 设置为触发器使用的属性:将该属性更改为  IsMouseOver。这会在  IsMouseOver 属性为  true时(即用户将鼠标指向按钮时)激活此属性触发器。

3.  IsMouseOver 为 glassCube 触发 100% 的不透明度:您会看到“触发器记录功能处于启用状态”[Trigger recording is on]
(见上图)。这意味着在记录功能启用的情况下,对“glassCube”属性值所做的任何更改都会成为当  IsMouseOver 为  true 时所执
行的操作。在记录期间,将“glassCube”现在,您已创建了第一个属性触发器。请注意,编辑器的的 Opacity 更改为 100%。

现在,您已创建了第一个属性触发器。请注意,编辑器的“触发器”面板记录了 Opacity 已更改为 100%。

按  F5 运行该应用程序,并将鼠标指针移到该按钮上,然后再移开。您应当会看到当鼠标移到该按钮上时,就会显示玻璃层;而当指针离开时,玻璃层就会消失。

4.  IsMouseOver 触发笔画值更改 :下面将某些其他操作与  IsMouseOver 触发器关联。在继续记录时,将所选内容从“glassCube”切换为“outerRectangle”。然后,将“outerRectangle”的 Stroke 设置为自定义表达式“{DynamicResource {x:Static SystemColors.HighlightBrushKey}}”。这会将 Stroke 设置为按钮所使用的典型突出显示颜色。按 F5 查看鼠标移到按钮上时的效果。

5.  IsMouseOver 触发模糊文本 :下面将另一个操作与  IsMouseOver 属性触发器关联。当按钮上面显示玻璃层时,使按钮内容显示
得有些模糊。为此,可以将模糊的 BitmapEffect 应用于 ContentPresenter (myContentPresenter)。

注意:若要将“属性”面板返回搜索 BitmapEffect 之前的外观,请从“搜索”框中清除文本。

此时,我们已对几个关联操作使用了属性触发器,以创建当鼠标指针进入及离开按钮区域时的突出显示行为。按钮的另一个典型行为就
是在具有焦点时(即被单击时)处于突出显示状态。可通过为  IsFocused 属性添加另一个属性触发器,来添加此类行为。

6. 为  IsFocused 创建属性触发器 :使用与  IsMouseOver 相同的过程(参见此部分中的第一步),为  IsFocused 属性创建另一个属
性触发器。当显示“触发器记录功能处于启用状态”[Trigger recording is on]”时,将下列操作添加到该触发器中:
• “glassCube”获取 100% 的 Opacity。
• “outerRectangle”获取 Stroke 自定义表达式值“{DynamicResource {x:Static SystemColors.HighlightBrushKey}}”。
作为本演练的最后一步,我们将向按钮添加动画。这些动画将由事件(具体来说是 MouseEnter 和 Click 事件)触发。
使用事件触发器和动画增加行为的情趣

1.  创建 MouseEnter 事件触发器 :添加新的事件触发器,并选择 MouseEnter 作为要在该触发器中使用的事件。

2.  创建动画时间线:接下来,将动画时间线与 MouseEnter 事件关联。

按“确定”创建一个新的时间线后,会显示“时间线”面板,同时设计面板上会显示“时间线记录功能处于启用状态”[Timeline recording is on]。这意味着可开始在时间线中记录属性更改(对属性更改进行动画处理)。

注意:可能需要调整窗口和/或面板大小,才能看到显示效果。

3.  创建关键帧:要创建动画,请选择要为其设置动画的对象,在时间线上创建两个或更多个关键帧,并为这些关键帧设置要在其间插入动画的属性值。下图将引导您完成创建关键帧的过程。

4.  在此关键帧处缩小 glassCube:选择第二个关键帧后,使用“大小变换”[Size Transform]将 “glassCube”的大小缩小为其实际大小的 90%。

按  F5 运行该应用程序。将鼠标指针移到该按钮上。您会看到该按钮上的玻璃层会缩小。

5.  创建另一个事件触发器并将其与另一个动画关联:下面将再添加一个动画。该过程与用于创建上一事件触发器动画的过程类似:
a.  使用 Click 事件创建一个新的事件触发器。
b.  将一个新的时间线与 Click 事件关联。

c.  在此时间线上,创建两个关键帧,一个位于 0.0 秒,另一个位于 0.3 秒。
d.  突出显示位于 0.3 秒处的关键帧后,将“旋转变换角度”[Rotate Transform Angle]设置为 360 度。

结束语

您已完成了自定义按钮的过程。此过程是通过按钮模板来实现的,该模板会应用于该应用程序中的所有按钮。

 

转载于:https://www.cnblogs.com/homezzm/archive/2010/07/01/1768833.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值