我正在尝试向上下文菜单添加标题。下面的xaml几乎可以满足我的需求。问题是用户可以选择TextBlock,如果他们单击Textblock,菜单就会消失。 (如果用户单击分隔符,则菜单仍然存在。)因此,基本上我希望如果用户将鼠标移到它上面而不突出显示TextBlock,并且如果用户单击TextBlock,我也不希望菜单消失。
<TextBlock.ContextMenu>
<ContextMenu>
<TextBlock Text="Test!!!" />
<Separator></Separator>
<MenuItem Header="menu item1" />
<MenuItem Header="menu item2" />
</ContextMenu>
</TextBlock.ContextMenu>
答案 0 :(得分:3)
您可以在分隔符上使用自定义模板来实现您想要的效果
<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>
这样,文本不会响应点击或悬停并保持菜单打开,如果您将模板转换为资源,则可以重复使用。
答案 1 :(得分:1)
试试这个
<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>
答案 2 :(得分:0)
如果您只想在Separator
的{{1}}上方添加一些空格,则习惯使用ContextMenu
属性。由于有四个输入值,我们只需要设置&#39; up&#39;值。试试这个:
Margin