EventSetter

在样式中,可以通过使用 EventSetter 在标记中包括某个预先声明的 XAML 事件处理语法。 在应用样式时,所引用的处理程序会添加到带样式的实例中。 只能针对路由事件声明 EventSetter 下面是一个示例。 请注意,此处引用的 b1SetColor 方法位于代码隐藏文件中。
1.xaml
<
StackPanel xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="SDKSample.EventOvw2" Name="dpanel2" Initialized="PrimeHandledToo" > <StackPanel.Resources> <Style TargetType="{x:Type Button}"> <EventSetter Event="Click" Handler="b1SetColor"/> </Style> </StackPanel.Resources> <Button>Click me</Button> <Button Name="ThisButton" Click="HandleThis"> Raise event, handle it, use handled=true handler to get it anyway. </Button> </StackPanel>
2.后台代码

void b1SetColor(object sender, RoutedEventArgs args)
{
//logic to handle the Click event

}
void HandleThis(object sender, RoutedEventArgs args)
{
//logic to handle the Click event

}

 

这样做的好处在于,样式有可能包含大量可应用于应用程序中任何按钮的其他信息,让 EventSetter 成为该样式的一部分甚至可以提高代码在标记级别的重用率。 而且,EventSetter 还进一步从通用的应用程序和页面标记中提取处理程序方法的名称。

另一个将 WPF 的路由事件和动画功能结合在一起的专用语法是 EventTrigger 与 EventSetter 一样,只有路由事件可以用于 EventTrigger。通常将EventTrigger 声明为样式的一部分,但是还可以在页面级元素上将 EventTrigger 声明为 Triggers 集合的一部分或者在 ControlTemplate 中对其进行声明。使用 EventTrigger,可以指定当路由事件到达其路由中的某个元素(这个元素针对该事件声明了 EventTrigger)时将运行 Storyboard 与只是处理事件并且会导致它启动现有演示图板相比,EventTrigger 的好处在于,EventTrigger 对演示图板及其运行时行为提供更好的控制。有关更多信息,请参见如何:在演示图板启动之后使用事件触发器来控制演示图板

-- 转自 MSDN 路由事件概述




posted @ 2013-05-01 18:18  Plantastic  阅读(264)  评论(0编辑  收藏  举报