WPF DataGridComboBoxColumn没有显示上下文菜单?

时间:2016-10-14 17:33:00

标签: c# wpf xaml contextmenu datagridcomboboxcolumn

我正在尝试创建一个具有静态列表的DataGridComboBoxColumn:未启动,正在进行中,已完成

以下是我在XAML中所拥有的内容,虽然它构建良好但我看不到下拉列表中的选项:

           <DataGridComboBoxColumn  Header="Status" Width="auto"  IsReadOnly="False"  >
                <DataGridColumn.HeaderStyle>
                    <Style TargetType="DataGridColumnHeader">
                        <Setter Property="Background" Value="LightGoldenrodYellow" />
                        <Setter Property="BorderThickness" Value="2,2,0,2" />
                    </Style>

                </DataGridColumn.HeaderStyle>
                <ContextMenuService.ContextMenu>
                    <ContextMenu>
                        <MenuItem Header="Not Started" />
                        <MenuItem Header="In Progress"  />
                        <MenuItem Header="Completed" />  
                    </ContextMenu>
                </ContextMenuService.ContextMenu>
            </DataGridComboBoxColumn>

我不明白为什么这不起作用,因为其他DataGrid.ContextMenu的工作方式。我觉得我在这里错过了一些非常简单的东西。

2 个答案:

答案 0 :(得分:1)

你可以使用CompositeCollection:

<DataGridComboBoxColumn  Header="Status" Width="auto"  IsReadOnly="False"  SelectedItemBinding="{Binding Path=Value}">
                <DataGridColumn.HeaderStyle>
                    <Style TargetType="DataGridColumnHeader">
                        <Setter Property="Background" Value="LightGoldenrodYellow" />
                        <Setter Property="BorderThickness" Value="2,2,0,2" />
                    </Style>
                </DataGridColumn.HeaderStyle>
                <DataGridComboBoxColumn.ItemsSource>
                    <CompositeCollection>
                        <sys:String>Not Started</sys:String>
                        <sys:String>In Progress</sys:String>
                        <sys:String>Completed</sys:String>
                    </CompositeCollection>
                </DataGridComboBoxColumn.ItemsSource>
            </DataGridComboBoxColumn>

添加命名空间:

xmlns:sys="clr-namespace:System;assembly=mscorlib"

答案 1 :(得分:0)

ContextMenuService提供了显示ContextMenu

的系统实现

你想要的并不是你已经拥有的东西。它经过测试并适合我:

<DataGridComboBoxColumn  Header="Status" Width="auto"  IsReadOnly="False"  >
    <DataGridColumn.HeaderStyle>
        <Style TargetType="DataGridColumnHeader">
            <Setter Property="Background" Value="LightGoldenrodYellow" />
            <Setter Property="BorderThickness" Value="2,2,0,2" />
        </Style>
    </DataGridColumn.HeaderStyle>
    <DataGridComboBoxColumn.CellStyle>
        <Style TargetType="DataGridCell">
            <Setter Property="ContextMenu">
                <Setter.Value>
                    <ContextMenu>
                        <MenuItem Header="Not Started" />
                        <MenuItem Header="In Progress"  />
                        <MenuItem Header="Completed" />
                    </ContextMenu>
                </Setter.Value>
            </Setter>
        </Style>
    </DataGridComboBoxColumn.CellStyle>
</DataGridComboBoxColumn>

目前设置为单击单击格式,但可以轻松设置为标题或两者。