2009-12-07 148 views
0

我一直在打我的頭靠在一個WPF彈出的問題,我希望有人能幫助我:) 輪廓是這樣的:彈出窗口在WPF立即失去焦點,靠近

我們的應用程序商店的列表UIObjects - 這些元素代表在視口3d中顯示的元素(通過成員UIRenderObject,它只是一個帶有位圖的平面,方形網格)和樹視圖(通過成員TreeViewItem)。

在任何一種情況下,當對象檢測到右鍵單擊時,它會嘗試打開一個彈出窗口。 操作的代碼大約是直線前進,你可以得到:

ContextMenu contextMenu = new ContextMenu(); 

//add content 

contextMenu.IsOpen = true; 

當我在視口中單擊,一切正常 - 在彈出的打開,並保持打開狀態,直至失去焦點或做出選擇。 但是,在樹形視圖中,彈出窗口失去焦點並立即關閉。

我試着明確地設置焦點,明確地設置PlacementTarget,將鼠標事件標記爲在打開彈出窗口之前和之後處理的,扁平標記彈出窗口爲「StaysOpen」和其他一些事物,以及它仍然立即關閉。

任何幫助將不勝感激。提前致謝!

+0

是否有任何TreeView或TreeView項單擊事件綁定到處理程序,如果是的話 - 這些處理程序在做什麼? – 2009-12-07 16:54:35

+0

在TreeViewItem上有左,右和中間的點擊處理程序 - 它們分別傳遞給UIObject做自己的事情,然後調用適當的鼠標按鈕的UIElement基本處理程序。 因此,在我的Popups的情況下,'base.OnMouseRightButtonDown'。 在UIObject的RightClick處理程序中,發生的所有事情都是對ShowContextMenu的調用,它將填充並打開彈出窗口。 左鍵單擊即可選擇樹形視圖項目。中點擊根本不會做任何事情。 我試着刪除對base.OnMouseRightButtonDown的調用,只是將事件標記爲已處理,但無濟於事。 – b34r 2009-12-07 17:24:31

回答

0

感嘆,事實證明我過於複雜了。 而不是自己管理上下文菜單,只需將其分配給TreeViewItem自己的ContextMenu並讓系統處理它,就是要走的路。 這將學習我。 感謝大家的輸入:)

+0

愚蠢的答案根本不起作用 – user1034912 2017-02-25 04:02:41

-1

這是ContextMenu的默認行爲。或者,您可以使用彈出式類而不是ContextMenu。然後你可以根據你的要求擴展它。

+0

真的嗎?這對我來說似乎很奇怪。如果一致,那將是一回事。但目前,它在一種情況下按預期工作,並在通過相同方法從一個稍微不同的來源打開時立即關閉。 不過,我會看到我能用Popup類做些什麼。謝謝! – b34r 2009-12-07 17:44:31