仅向Expander标头添加上下文菜单

时间:2016-06-29 09:47:43

标签: c# wpf xaml

我试图组建一个数据网格(在MVVM 4.5项目中),它将显示按特定属性(通过使用扩展器)分组的数据。这一切都有效,但我想添加一个上下文菜单,其中包含选项" 全部展开"和" 全部折叠"这将折叠/扩展所有组。此菜单项单击事件的事件处理程序正在窗口的代码隐藏中处理。

问题是我的上下文菜单应用于扩展器,因此由其所有子项继承,包括<ItemsPresenter/>和所有行/单元格。

我想将上下文菜单应用于分组标题本身。如果将其应用于内部(例如下面示例中的StackPanel),则可以实现这一点,但在这种情况下,整个标题行无法访问上下文菜单,仅在{ {1}}内容/文字。

我计划为项目本身使用不同的上下文菜单(添加/编辑等),并且折叠/展开上下文菜单仅适用于组标题。这可以实现吗?

StackPanel

1 个答案:

答案 0 :(得分:2)

如果我理解你的话,你想点击StackPanel中的任意位置,让ContextMenu像这样工作:

ContextMenu

如果是,我们在这里输入代码:

 <Expander Grid.Row="1">
            <Expander.Style>
                <Style TargetType="{x:Type Expander}">
                    <Setter Property="ContextMenu" Value="{x:Null}"/>
                </Style>
            </Expander.Style>
            <Expander.Header>
                <StackPanel Orientation="Horizontal" Width="{Binding Path=ActualWidth, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Expander}}}" Background="Pink" HorizontalAlignment="Stretch">
                    <StackPanel.Style>
                        <Style TargetType="StackPanel" >
                            <Setter Property="ContextMenu"  Value="{StaticResource cm_columnHeaderMenu}"></Setter>
                        </Style>
                    </StackPanel.Style>
                    <TextBlock Text="Hello" />
                    <TextBlock Text=" (" />
                    <TextBlock Text="world" />
                    <TextBlock Text=")" />
                    <TextBlock Text="{Binding Path=ActualWidth, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Expander}}}" />
                </StackPanel>
            </Expander.Header>
            <TextBlock Text="Dummy"></TextBlock>
        </Expander>

我做了什么?

  • 首先,将Stackpanel-Width绑定到Expander的实际宽度
  • 其次,让Stackpanel伸展。

希望这有帮助