为StackPanel中包含的静态按钮的“Click”事件绑定RoutedEvent很容易。 RoutedEventArgs将按钮包含为事件的 e.Source 。
XAML:
<StackPanel Grid.Column="1" Button.Click="RoutedEventHandler">
<Button Name="btn1" Content="btn1" />
<Button Name="btn2" Content="btn2" />
</StackPanel>
代码背后:
private void RoutedEventHandler(object sender, RoutedEventArgs e)
{
MessageBox.Show(((FrameworkElement)e.Source).Name);
}
但是 - 使用“ListViewItem.MouseDoubleClick”处理路由事件将导致 e.Source 中的ListView容器对象,而不是预期的ListViewItem对象。
XAML:
<ListView Name="lbAnecdotes"
ListViewItem.MouseDoubleClick="RoutedEventHandler">
<ListView.ItemTemplate >
<DataTemplate>
<WrapPanel >
<TextBlock Text="{Binding Path=Name}" />
</WrapPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView >
你能解释一下这种不一致吗?
答案 0 :(得分:1)
简单地说,ListViewItem.MouseDoubleClick
事件不是RoutedEvent
事件的ButtonBase.Click
事件。它使用MouseButtonEventHandler
委托和Direct
路由策略,其中ButtonBase.Click
事件是具有RoutedEvent
策略的Bubbling
。它们是不同类型的事件,实现方式不同。