-
- 通过对附加事件的定义,WPF路由事件的管道传递和冒泡,可以通过一个没有定义过该事件的元素来完成。
- 每个路由事件都可以被当作附加事件使用
3.3.4 附加事件
例如:
XAML文件
<Window x:Class="WpfApplication1.AboutDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="About WPF Unleashed"
ListBox.SelectionChanged="ListBox_SelectionChange"
ButtonBase.Click="Button_Click"
SizeToContent="WidthAndHeight"
Background="OrangeRed">
<StackPanel>
<Label FontWeight="Bold"
FontSize="20"
Foreground="White">
WPF Unleashed (Version 3.0)
</Label>
<Label>
© 2006 SAMS Publishing
</Label>
<Label>
Installed Chapters:
</Label>
<ListBox>
<ListBoxItem>
Chapter 1
</ListBoxItem>
<ListBoxItem>
Chapter 2
</ListBoxItem>
</ListBox>
<StackPanel Orientation="Horizontal"
HorizontalAlignment="Center">
<Button MinWidth="75"
Margin="10">
Help
</Button>
<Button MinWidth="75"
Margin="10">
OK
</Button>
</StackPanel>
<StatusBar>
You have successfully registered this product.
</StatusBar>
</StackPanel>
</Window>
对应的代码隐藏文件
using System.Windows;
using System.Windows.Controls;
namespace WpfApplication1
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class AboutDialog : Window
{
public AboutDialog()
{
InitializeComponent();
}
private void ListBox_SelectionChange(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems.Count > 0)
{
MessageBox.Show("You just selected " + e.AddedItems[0]);
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("You just clicked " + e.Source);
}
}
}
注意:由于Window并没有定义它自己的SelectionChanged事件或Click事件,因此事件特性名称必须拥有定义这些事件的类名称作为前缀。