为用户无法选择的上下文菜单添加标题

时间:2014-08-21 15:29:43

标签: c# wpf xaml

我正在尝试向上下文菜单添加标题。下面的xaml几乎可以满足我的需求。问题是用户可以选择TextBlock,如果他们单击Textblock,菜单就会消失。 (如果用户单击分隔符,则菜单仍然存在。)因此,基本上我希望如果用户将鼠标移到它上面而不突出显示TextBlock,并且如果用户单击TextBlock,我也不希望菜单消失。

<TextBlock.ContextMenu>
    <ContextMenu>
        <TextBlock Text="Test!!!" />
        <Separator></Separator>
        <MenuItem Header="menu item1" />
        <MenuItem Header="menu item2" />
    </ContextMenu>
</TextBlock.ContextMenu>

3 个答案:

答案 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