简体   繁体   English

如何将图标绑定到资源中定义的上下文菜单

[英]How do you bind Icons to context menu defined in the resources

I want to bind an icon to a context menu item in a WPF data grid. 我想将图标绑定到WPF数据网格中的上下文菜单项。 While this works fine for the context menu in the data grid itself (right click on empty area in data grid), it doesn't work for the items in the data grid (right click on a data row). 尽管这对于数据网格本身中的上下文菜单(在数据网格中的空白区域上单击鼠标右键)可以正常工作,但不适用于数据网格中的项目(在数据行上单击鼠标右键)。 Any ideas why this doesn't work? 任何想法为什么这不起作用? Thanks for your answers. 感谢您的回答。

Code: 码:

datagridTarget.DataContext = contextIcons;
// contextIcons contains the icon elements

XAML: 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>

The items in a DataGrid usually each have a different DataContext to represent each item. DataGrid中的项目通常每个都有一个不同的DataContext来表示每个项目。 For example with a DataGrid that is bound to a list of "Person" class, each row represents each person. 例如,对于绑定到“人员”类列表的DataGrid,每行代表每个人。

If you want to bind to your parent DataContext, you need to use a more advanced binding syntax, such as: 如果要绑定到父DataContext,则需要使用更高级的绑定语法,例如:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM