2013-08-23 84 views
0

我有一個UI,它是一個diagramSurface對象。 運行應用程序時,我將一個元素(一種標籤)拖放到它上面。 我想爲這個對象實現一個CONTEXTMENU。WPF中的DiagramSurface上的選定項的上下文菜單

我已經這樣做了

<DiagramSurface> 
    <DiagramSurface.ContextMenu> 
     <ContextMenu > 
       <MenuItem Header="Save" Click="MenuItem_Click"/> 
     </ContextMenu> 
    <DiagramSurface.ContextMenu> 
</DiagramSurface> 

通過這樣做,我能夠看見文本菜單,如果我對地表單擊對象不存在。 如何避免這種情況?我只想在元素的右側顯示上下文菜單。

+0

很好地去除指定'ContextMenu'從'DiagramSurface.ContextMenu'中移除,以將其從'DiagramSurface'中的任何位置移除。將'ContextMenu'定義爲一個xaml資源,當你拖放你的標籤控件(你曾經/然而)時,通過從資源中檢索ContextMenu來爲那個項目分配ContextMenu。 – Viv

+0

發佈完整的XAML和相關代碼。我不知道那個'DiagramSurface'是什麼。 –

+0

@HighCore,快速在線搜索顯示'DiagramSurface'控件是來自Telerik的擴展'Canvas'。 – Sheridan

回答

0

由於@Viv說(雖然我不知道他爲什麼不說出來的答案),該ContextMenu會出現當你右鍵點擊任何地方要添加到控制。因此,如果您將其添加到DiagramSurface,它將在您點擊該控件上的任何位置時顯示。要解決您的問題,請從DiagramSurface控件中刪除聲明。

現在,您需要將其添加到您拖放的控件中。你可以做@Viv說和定義ContextMenuResources部分:

<Application.Resources> 
    <ContextMenu x:Key="ContextMenu"> 
     <MenuItem Header="Save" Click="MenuItem_Click"/> 
    </ContextMenu> 
</Application.Resources> 

然後從代碼並將其設置爲拖放元素的ContextMenu

ContextMenu menu = (ContextMenu)Application.Current.FindResource("ContextMenu"); 
element.ContextMenu = contextMenu; 
+0

如果我的控件(元素)是在XAML中定義的,那麼您給出的解決方案工作。但是im定義類中的元素。我的其他選擇是什麼? – harin04

+0

我找到了一種解決方法。我在dagram表面創建了一個事件,並將contextMenu的可見性設置爲隱藏。 ..continued .. – harin04

+0

..continued然後在事件提出我找到了eventclick的位置,然後元素的類型..如果它與我拖動和放下的元素相同,我設置Visibile的可見性。這工作 – harin04