2012-12-07 104 views
3

我正尝试用径向样式为每个项目创建一个完全自定义的上下文菜单(“pie slices”)。我已经能够从ItemsControl的基础创建一个。但是,当我尝试将其切换到ContextMenu的基础时,我无法摆脱项目列表中每个饼图切片的默认弹出窗口。完全自定义上下文菜单

有没有什么办法可以重写默认的ContextMenu风格来摆脱这个项目列表功能?

编辑:这是我的问题的屏幕截图。该代码几乎是两个实例之间完全相同的,比类是继承自其他和它是如何显示(将作为一个孩子到一个Canvas与显示弹出式)

Top: The custom context menu inheriting from ItemsControl. Bottom: The same context menu inheriting from ContextMenu

编辑2:我试图重写默认样式如下:

<ContextMenu.Style> 
    <Style TargetType="ContextMenu"> 
    <Setter Property="OverridesDefaultStyle" Value="true" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
     <ControlTemplate TargetType="ContextMenu"> 
      <Canvas IsItemsHost="true" Height="100" Width="100" /> 
     </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    </Style> 
</ContextMenu.Style> 

The context menu when overriding the default style.

+0

可以添加一个屏幕截图,也许有点示例代码,请? –

+1

我在这里回答了这个问题:http://stackoverflow.com/questions/15675382/customizing-context-menu-in-wpf/16094841#16094841 –

回答

2

如果你只是想改变一个WPF控件的appeareance,只是改变它的控件模板。

这里是文本菜单的默认之一:http://msdn.microsoft.com/en-us/library/ms744758.aspx

而且不要忘记更新菜单项的ControlTemplate太:http://msdn.microsoft.com/en-us/library/ms747082(v=vs.85).aspx

+0

StackPanel作为ItemsHost在这里没用。自定义“CircleItemsPanel”应该被开发来显示项目。我认为这是关键。 – Oleg

+0

我试过这个,只是用一个Canvas来测试它。我发布了一篇对原文的编辑,但仍然有一些ContextMenu的基础功能似乎没有被样式覆盖。 – Sarah

+0

忘记MenuItem模板 – mathieu

0

我本人来说不知道任何方式覆盖或更改默认文本菜单布局。 如果看起来没有合适的方法,我认为你应该使用Adorner类创建它,否则通过创建一个新的透明tomost窗口。 向我们通报您将选择的解决方案。

问候