3

すべてのメニュー項目のイベントをキャプチャしようとしてContextMenuいます。そのようです:DataGridMenuItem.Click

<DataGrid Name="dataGridMembers" Grid.Row="1" Grid.ColumnSpan="15"
          AutoGenerateColumns="False" SelectionMode="Single"
          ItemsSource="{Binding MemberList}" RowHeaderWidth="5"
          MouseDoubleClick="dataGridMembers_MouseDoubleClick"
          MenuItem.Click="NewReservationContextMenuClick">
    <DataGrid.ContextMenu>
        <ContextMenu Name="GridMenu">
            <MenuItem 
                Name="AddSponsoredSingle"
                Header="Add Sponsored Single" />
            <Separator />
            <MenuItem 
                Name="EditNote"
                Header="Add/Edit Note" />
            <Separator />
            <MenuItem 
                Name="AddMale"
                Header="Add Male" />
            <MenuItem 
                Name="AddFemale"
                Header="Add Female"/>
            <MenuItem 
                Name="AddCouple"
                Header="Add Couple"/>
        </ContextMenu>
    </DataGrid.ContextMenu>
    <DataGrid.Columns>
     ...
    </DataGrid.Columns>
</DataGrid>

問題は、イベントが発生しないことです。MenuItem.Clickはバブル イベントであると想定されており、ビジュアル ツリーのどこでもキャッチできるはずです。

私は何を間違っていますか?

編集:コードにハンドラーを追加すると正常に動作します。.xaml.csand allのコンストラクター内の次の行は適切です。

GridMenu.AddHandler(MenuItem.ClickEvent, new RoutedEventHandler(NewReservationContextMenuClick));
4

2 に答える 2

4

は、その論理的な親のビジュアル ツリーの一部ではないコントロールでContextMenu開かれます。Popup

Clickすべての に共通のハンドラーを持たせるには、ハンドラーを要素MenuItemsに移動します。ContextMenu

<DataGrid Name="dataGridMembers" Grid.Row="1" Grid.ColumnSpan="15" 
          AutoGenerateColumns="False" SelectionMode="Single" 
          ItemsSource="{Binding MemberList}" RowHeaderWidth="5" 
          MouseDoubleClick="dataGridMembers_MouseDoubleClick" 
          > 
    <DataGrid.ContextMenu> 
        <ContextMenu Name="GridMenu"
             MenuItem.Click="NewReservationContextMenuClick"> 
            ...
        </ContextMenu>
于 2012-06-09T07:25:20.727 に答える
2

すべての のスタイルを使用してMenuItem、イベント ハンドラーを割り当てることもできます。

<DataGrid.Resources>
    <Style TargetType="{x:Type MenuItem}">
        <EventSetter Event="Click" Handler="NewReservationContextMenuClick" />
    </Style>
</DataGrid.Resources>
于 2012-06-09T11:08:02.970 に答える