我想将图标绑定到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>
答案 0 :(得分:0)
DataGrid中的项通常都有不同的DataContext来表示每个项。例如,对于绑定到“Person”类列表的DataGrid,每行代表每个人。
如果要绑定到父DataContext,则需要使用更高级的绑定语法,例如:
{Binding DataContext.ContextDeleteIcon, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}