WPF 之Event

翻译 2007年09月17日 14:54:00

WPF中的Event

 

Routed Events 意指一个事件在一个相互关联的元素组成的树中传递,而非直接传递到一个特定的目标。

它可以在两个方向进行传递,Bubbling, tunneling

事件Routed的三种方式

1〉  Bubbling:事件由源头传递到元素树的最顶点

2〉  tunneling:事件由树的顶端传递的源头

3〉  direct:事件不在树中移动,表现方式类同标准的CLR事件

 

如何写Routed Event

示例:

Public static readonly RoutedEvent TapEvent =

EventManager.RegisterRoutedEvent(“Tap”,

RoutingStrategy.Bubble,

typeof(RoutedEventHandle),

typeof(MyButtonSimple)

);

// Provide CLR accessors for the event

Public event RoutedEventHandle Tap

{

       Add{AddHandler(TapEvent, value);}

       Remove{RemoveHandler(TapEvent, value);}

}

 

如何在Xaml关联事件

<Button Click=”blSetColor”>button</Button>

 

为什么要使用Routed Event

对于一组需要交互的控件,可以将父元素作为一个通用的事件监听者,然后使用同一个事件函数来处理交互。

示例如下

A grouped button set

XAML

<Border Height="50" Width="300" BorderBrush="Gray" BorderThickness="1">

  <StackPanel Background="LightGray" Orientation="Horizontal" Button.Click="CommonClickHandler">

    <Button Name="YesButton" Width="Auto" >Yes</Button>

    <Button Name="NoButton" Width="Auto" >No</Button>

    <Button Name="CancelButton" Width="Auto" >Cancel</Button>

  </StackPanel>

</Border>

 

C#

Private void CommonClickHandler(object sender, RoutedEventArgs e)

{

       FrameworkElement feSource = e.Source as FrameworkElement;

       Switch(feSource.Name)

       {

              Case “YesButton”:

                     // do something here

                     Break;

              Case “NoButton”

                     // do something

                     Break;

              Case “CancelButton”:

                     // do something

                     Break;

}

e.Handled = true;

}

自定义Event

示例如下:

 

//Invoke该事件

protected virtual void OnPipeValueChanged(double oldValue, double newValue)

        {

            RoutedPropertyChangedEventArgs<double> args = new RoutedPropertyChangedEventArgs<double>(oldValue, newValue);

            args.RoutedEvent = PipeControl.PipeValueChangedEvent;

            RaiseEvent(args);

        }

// 注册该事件

        public static readonly RoutedEvent PipeValueChangedEvent =

            EventManager.RegisterRoutedEvent("PipeValueChanged",

            RoutingStrategy.Bubble,

            typeof(RoutedPropertyChangedEventHandler<double>),

            typeof(PipeControl));

 

相关文章推荐

Game2048__WPF-Linq-Event

  • 2014年05月28日 10:32
  • 85KB
  • 下载

WPF WEBROWSER EVENT NEWWINDOW

  • 2011年02月11日 10:53
  • 34KB
  • 下载

keybd_event使用方法

Windows提供了一个模拟键盘API函数Keybd_event(),使用该函数可以相应的屏蔽键盘的动作。Keybd_event()函数能触发一个按键事件,也就是说会产生一个WM_KEYDOWN或WM...

OSS Event Manager

  • 2017年04月10日 16:30
  • 61KB
  • 下载

libevent源码学习(二)事件循环event_base

libevent源码学习之event_base

javascript Event(事件模型)

  • 2013年04月23日 14:34
  • 526KB
  • 下载

Event Registration Web

  • 2009年04月15日 13:12
  • 9KB
  • 下载

Xamarin Forms-通用事件绑定(Event Binding)的实现

对熟悉Xaml和WPF的朋友来说,Xamarin的Forms真的是一个神器。在Xamarin Forms里,Xaml还是那熟悉的Xaml(至少大体上是这样的),C#也还是那熟悉的C#,编译后的结果却是...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WPF 之Event
举报原因:
原因补充:

(最多只允许输入30个字)