0

如何访问未填充单元格的 DataGrid 区域?

在此处输入图像描述

我只想为这个区域添加上下文菜单

4

2 回答 2

1

您可以为“空白”区域将 ContextMenu 分配给 DataGrid 本身,但如果您没有为行分配不同的上下文菜单(或“DataGrid.行样式”属性)。

“解决方法”是专门为行分配不同的上下文菜单。

<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

根据您对先前答案的评论,我看到您想在标题上设置一个 ContextMenu,并为您的单元格和空白空间设置一个单独的。我可以通过覆盖模板来设置单独的 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 回答