2

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」でルーティング イベントを処理すると、期待される ListViewItem オブジェクトではなく、e.Sourceに ListView コンテナ オブジェクトが生成されます。

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.ClickMouseButtonEventHandlerデリゲートとDirectルーティング戦略を使用し、ButtonBase.Clickイベントは戦略を使用します。これらは異なるタイプのイベントであり、異なる方法で実装されます。RoutedEventBubbling

于 2013-07-22T10:32:13.583 に答える