0

Dataridのリソースでコンテキストメニューを定義しました。コンテキストメニューのClickイベントで、親コントロール(DataGrid)の名前を確認します。VisualTreeHelper.GetParent()とLogicalTreeHelper.GetParent()を試しましたが、どちらもxamlの階層を反映していません。ClickイベントからDataGridコントロールを取得するにはどうすればよいですか?回答ありがとうございます。

コード:

private void datagridTargetDelete_Click(object sender, RoutedEventArgs e)
{
    // Check the name of the DataGrid here...
}

XAML:

<DataGrid Name="datagridTarget">
    <DataGrid.Resources>
        <ContextMenu x:Key="DGTContextMenu">
            <MenuItem Header="Delete" Click="datagridTargetDelete_Click">
                <MenuItem.Icon>
                    <Image Height="16" Width="16" Source="{Binding ContextDeleteIcon}"/>
                </MenuItem.Icon>
            </MenuItem>
        </ContextMenu>
    </DataGrid.Resources>
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="" Width="Auto" IsReadOnly="True">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Image ContextMenu="{DynamicResource DGTContextMenu}" Height="16" Width="16" Source="{Binding ObjectImage}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>
4

2 に答える 2

3

これはあなたが望む正確なものをあなたに与えるでしょう:

var parent = ((ContextMenu)((MenuItem)sender).Parent).PlacementTarget;
于 2012-09-28T15:42:58.887 に答える
0

この場合、親要素に CommandBinding を持つ RoutedCommand を検討することをお勧めします。これは実際に ContextMenu が使用される方法だと思います。そうすれば、WPF が親オブジェクトを見つけてくれるので、論理ツリーを検索する必要はありません。

于 2012-09-28T17:36:00.993 に答える