【问题标题】:How do you bind Icons to context menu defined in the resources如何将图标绑定到资源中定义的上下文菜单
【发布时间】:2012-09-21 12:46:55
【问题描述】:

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

【问题讨论】:

    标签: c# wpf icons contextmenu menuitem


    【解决方案1】:

    DataGrid 中的项目通常每个都有不同的 DataContext 来表示每个项目。例如,对于绑定到“Person”类列表的 DataGrid,每一行代表每个人。

    如果要绑定到你的父DataContext,需要使用更高级的绑定语法,比如:

    {Binding DataContext.ContextDeleteIcon, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}
    

    【讨论】:

    • 感谢 Moozhe,完美运行。实际上我已经尝试设置RelativeSource,但是将Binding设置为ContextDeleteIcon而不是DataContext.ContextDeleteIcon。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 2017-11-05
    相关资源
    最近更新 更多