2

アイコンを 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>
4

1 に答える 1

0

DataGridのアイテムには通常、各アイテムを表すために異なるDataContextがあります。たとえば、「Person」クラスのリストにバインドされているDataGridの場合、各行は各人物を表します。

親のDataContextにバインドする場合は、次のようなより高度なバインド構文を使用する必要があります。

{Binding DataContext.ContextDeleteIcon, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}
于 2012-09-21T14:02:10.120 に答える