c# - 如何将图标绑定(bind)到资源中定义的上下文菜单

标签 c# wpf icons contextmenu menuitem

我想将图标绑定(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/

相关文章:

android - 如何在状态栏中创建没有图标的通知或简单地隐藏它?

c# - 更改新创建对象的保护级别?

c# - 在多个线程中添加和删除时 List<string> 中的 null 值

c# - 如何在 WPF 中制作模板窗口?

bash - 带有 gnome 终端的桌面应用程序 : relative paths to script and icon

hyperlink - 为什么我的 Admob 帐户上的应用显示默认图标?

c# - 我应该捕获并包装一般异常吗?

c# - .net 4.5.2 中对 Math.Exp 或双重实现的更改

wpf - 绑定(bind) StringFormat 似乎无法正常工作

c# - 在哪里指定 FocusVisualStyle ="{x:Null}"?