0

セルで満たされていない DataGrid 領域にアクセスするにはどうすればよいですか?

ここに画像の説明を入力

このエリアだけコンテキストメニューを追加したい

4

2 に答える 2

1

「空白」領域の DataGrid 自体に ContextMenu を割り当てることができますが、行 (または「DataGrid. RowStyle" プロパティ)。

「回避策」は、具体的には、別のコンテキスト メニューを行に割り当てることです。

<DataGrid>
    <DataGrid.ContextMenu>
        <ContextMenu>
            <MenuItem Header="Menu Item in Blank Area" />
        </ContextMenu>
    </DataGrid.ContextMenu>
    <DataGrid.RowStyle>
        <Style TargetType="{x:Type DataGridRow}">
            <Setter Property="ContextMenu">
                <Setter.Value>
                    <ContextMenu>
                        <MenuItem Header="Menu Item just for Populated Rows" />
                    </ContextMenu>
                </Setter.Value>
            </Setter>
        </Style>
    </DataGrid.RowStyle>   
</DataGrid>
于 2012-12-06T15:53:08.830 に答える
1

前の回答へのコメントに基づいて、ヘッダーに 1 つの ContextMenu を設定し、セルと空のスペースに別の ContextMenu を設定したいことがわかりました。Template をオーバーライドすることで、個別の ContextMenus を設定できました。

<Window x:Class="Apc_System_Generator.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.Resources>
            <ResourceDictionary>
                <ContextMenu x:Key="cmenu">
                    <MenuItem Header="FOO" />
                    <MenuItem Header="BAR" />
                </ContextMenu>
                <ContextMenu x:Key="omenu">
                    <MenuItem Header="LOL" />
                    <MenuItem Header="WUT" />
                </ContextMenu>
            </ResourceDictionary>
        </Grid.Resources>
        <DataGrid Name="LOL" AutoGenerateColumns="True" ContextMenu="{StaticResource cmenu}">
            <DataGrid.Template>
                <ControlTemplate TargetType="{x:Type DataGrid}">
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="*" />
                        </Grid.RowDefinitions>
                        <DataGridColumnHeadersPresenter Grid.Row="0" ContextMenu="{StaticResource omenu}" />
                        <DataGridRowsPresenter Background="gray" Grid.Row="1" IsItemsHost="True" />
                    </Grid>
                </ControlTemplate>
            </DataGrid.Template>
        </DataGrid>
    </Grid>
</Window>
于 2012-12-06T16:25:19.013 に答える