如何访问未填充单元格的 DataGrid 区域?
我只想为这个区域添加上下文菜单
您可以为“空白”区域将 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>
根据您对先前答案的评论,我看到您想在标题上设置一个 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>