我想将图标绑定(bind)到 WPF 数据网格中的上下文菜单项。虽然这对数据网格本身的上下文菜单工作正常(右键单击数据网格中的空白区域),但它不适用于数据网格中的项目(右键单击数据行)。任何想法为什么这不起作用?感谢您的回答。
代码:
datagridTarget.DataContext = contextIcons;
// contextIcons contains the icon elements
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>
<ContextMenuService.ContextMenu>
<ContextMenu>
<MenuItem Header="Delete" Click="datagridTargetDelete_Click">
<MenuItem.Icon>
<Image Height="16" Width="16" Source="{Binding ContextDeleteIcon}"/>
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</ContextMenuService.ContextMenu>
<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>
最佳答案
DataGrid 中的项目通常每个都有不同的 DataContext 来表示每个项目。例如,对于绑定(bind)到“Person”类列表的 DataGrid,每一行代表每个人。
如果你想绑定(bind)到你的父DataContext,你需要使用更高级的绑定(bind)语法,例如:
{Binding DataContext.ContextDeleteIcon, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}
关于c# - 如何将图标绑定(bind)到资源中定义的上下文菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12530918/