【问题标题】:DataGrid area not filled with CellsDataGrid 区域未填充单元格
【发布时间】:2012-12-07 00:25:19
【问题描述】:

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

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

【问题讨论】:

    标签: wpf datagrid contextmenu


    【解决方案1】:

    您可以将 ContextMenu 分配给 DataGrid 本身的“空白”区域,但如果您没有为行分配不同的上下文菜单(或“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>
    

    【讨论】:

    • 这个想法是将相同的上下文菜单分配给单元格和未填充单元格的区域(在图片上标记为“this”)。和其他上下文菜单到页眉。这就是我问这个问题的原因。
    • 请更新您的原始问题以反映这一点。答案还是一样;您将为 元素创建一个上下文菜单(这将影响 DataGrid 中的所有内容,包括空白区域和单元格),并为您要覆盖的特定内容分配一个不同的菜单(在本例中为 Header )
    【解决方案2】:

    根据您对上一个答案的评论,我看到您想在标题上设置一个 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>
    

    【讨论】:

      猜你喜欢
      • 2017-07-04
      • 2013-12-11
      • 1970-01-01
      • 2017-08-30
      • 2011-12-27
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      • 1970-01-01
      相关资源
      最近更新 更多