我试图组建一个数据网格(在MVVM 4.5项目中),它将显示按特定属性(通过使用扩展器)分组的数据。这一切都有效,但我想添加一个上下文菜单,其中包含选项" 全部展开"和" 全部折叠"这将折叠/扩展所有组。此菜单项单击事件的事件处理程序正在窗口的代码隐藏中处理。
问题是我的上下文菜单应用于扩展器,因此由其所有子项继承,包括<ItemsPresenter/>
和所有行/单元格。
我想仅将上下文菜单应用于分组标题本身。如果将其应用于内部(例如下面示例中的StackPanel
),则可以实现这一点,但在这种情况下,整个标题行无法访问上下文菜单,仅在{ {1}}内容/文字。
我计划为项目本身使用不同的上下文菜单(添加/编辑等),并且折叠/展开上下文菜单仅适用于组标题。这可以实现吗?
StackPanel
答案 0 :(得分:2)
如果我理解你的话,你想点击StackPanel
中的任意位置,让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>
我做了什么?
希望这有帮助