2012-12-07 102 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窗口。 向我們通報您將選擇的解決方案。

問候