为用户无法选择的上下文菜单添加标题
本文关键字:上下文 菜单 添加 标题 选择 用户 | 更新日期: 2023-09-27 18:18:56
我正在尝试添加标题到上下文菜单。下面的xaml几乎可以满足我的需要。问题是用户可以选择TextBlock,如果他们点击TextBlock,菜单就会消失。(如果用户单击分隔符,则菜单保留。)所以基本上我想要TextBlock不突出显示,如果用户移动他们的鼠标在它,我也不希望菜单消失,如果用户点击TextBlock。
<TextBlock.ContextMenu>
<ContextMenu>
<TextBlock Text="Test!!!" />
<Separator></Separator>
<MenuItem Header="menu item1" />
<MenuItem Header="menu item2" />
</ContextMenu>
</TextBlock.ContextMenu>
您可以在分隔符上使用自定义模板来实现您想要的效果
<TextBlock.ContextMenu>
<ContextMenu>
<Separator>
<Separator.Template>
<ControlTemplate TargetType="Separator">
<StackPanel>
<TextBlock Text="Test!!!" />
<Separator/>
</StackPanel>
</ControlTemplate>
</Separator.Template>
</Separator>
<MenuItem Header="menu item1" />
<MenuItem Header="menu item2" />
</ContextMenu>
</TextBlock.ContextMenu>
这样,文本不会响应点击或悬停,并保持菜单打开,而且如果你把模板变成资源,你可以重用。
如果您只是想在ContextMenu
中的Separator
上方添加一些空间,那么习惯上使用Margin
属性。由于有四个输入值,我们只需要设置"up"值。试试这个:
<TextBlock Text="{Binding SomeTextField}">
<TextBlock.ContextMenu>
<ContextMenu>
<Separator Margin="0,25,0,0"></Separator>
<MenuItem Header="menu item1" />
<MenuItem Header="menu item2" />
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
试试这个
<Style TargetType="{x:Type ContextMenu}">
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="Grid.IsSharedSizeScope" Value="true" />
<Setter Property="HasDropShadow" Value="True" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ContextMenu}">
<Border x:Name="Border" Background="White" BorderThickness="1" BorderBrush="Gray">
<StackPanel>
<TextBlock Text="Test!!!!"/>
<Separator></Separator>
<StackPanel
IsItemsHost="True"
KeyboardNavigation.DirectionalNavigation="Cycle" />
</StackPanel>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="HasDropShadow" Value="true">
<Setter TargetName="Border" Property="Padding" Value="0,3,0,3" />
<Setter TargetName="Border" Property="CornerRadius" Value="4" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>