我在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>
答案 0 :(得分:2)
这将为您提供您想要的确切内容:
var parent = ((ContextMenu)((MenuItem)sender).Parent).PlacementTarget;
答案 1 :(得分:0)
在这种情况下,您可能需要考虑在父元素上使用CommandBinding的RoutedCommand。我认为这实际上是如何使用ContextMenu的。这样,WPF将为您找到父对象,您不必在逻辑树中搜索它。