2

为 StackPanel 中包含的静态按钮的“单击”事件绑定 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 >

你能解释不一致的地方吗?

4

1 回答 1

1

简单地说,ListViewItem.MouseDoubleClick事件不是一个RoutedEvent喜欢的ButtonBase.Click事件。它使用MouseButtonEventHandler委托和Direct路由策略,其中ButtonBase.Click事件是RoutedEvent带有Bubbling策略的。它们是不同类型的事件,实现方式也不同。

于 2013-07-22T10:32:13.583 回答