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 回答