2014-09-19 17 views
0

我有一個帶有自定義光標的Windows現代應用程序,它通過在系統光標後面顯示圖像來實現。自定義光標在每個其他可視組件上方

我只是將自定義光標圖像添加到我的應用程序的主網格,一切工作正常。

public MainPage() : base(true) 
{ 
    this.InitializeComponent(); 
    MainPageGrid.Children.Add(new CustomCursor()); 
} 

但是當彈出窗口打開時,它會在我的自定義光標上方。無論如何,我可以設置組件的Z-index(或類似的東西),以便它成爲我現代應用程序的最高視覺組件。

+1

聽起來像您可能需要查看「活動窗口」,然後檢查是否..只有您知道彈出窗口是活動窗口或在最前沿..然後設置您的自定義光標..但不能看到沒有看到任何代碼 – MethodMan 2014-09-19 13:41:14

+0

我添加了我使用的代碼,希望它有幫助。同時,我將按照您的建議檢查「活動窗口」。 – 2014-09-19 14:43:32

+1

那麼我會說'Popup'是一個特殊的控件,它顯示在除了最頂層窗口之外的所有窗口之上。只有實際的鼠標(不是假的鼠標)可以懸停在它上面。無論如何,你應該使用'Window'或甚至'Popup'來僞造遊標(CustomCursor),然後你可以將它設置爲最頂層,以便它可以放在彈出窗口的頂部。 – 2014-09-19 16:32:38

回答

0

不需要實現作爲自定義光標的組件,因爲它可以覆蓋最大大小限制: How to override maximum 32x32 mouse size in Windows like this program can

+0

您是否可以從商店應用程序調用'SetSystemCursor'? – 2014-09-25 17:32:05

+0

其實我用桌面可執行文件來打這個電話,因爲這個應用程序只是爲了學術目的。 – 2014-09-25 17:52:53

1

我會推薦使用實際的自定義光標。我認爲this article看起來像一個體面的介紹使用這些。你也可以檢查this question關於改變光標的一些提示。除此之外 - 我不認爲你可以告訴隨機彈出何時打開。您可以使用VisualTreeHelper.GetOpenPopups()進行輪詢,然後執行一些操作使您的彈出窗口顯示在頂部(也許只需重新打開即可工作,或者您需要每次創建一個新窗口),但這可能無法爲您提供良好的用戶體驗或性能。你也可以計算出所有可以顯示ComboBoxes,Flyouts等彈出窗口的事件,但這聽起來很痛苦。最好創建一個附加行爲,您可以附加到所有這些彈出源元素,以觸發XAML呈現的自定義光標的z-index修正...

+0

感謝您的回答。我無法自定義系統的光標,因爲所允許的最大尺寸爲32x32p,而且我的尺寸更大。正如我回答以前的評論,只是打開和關閉彈出窗口不會顯示在其他彈出窗口上方。我會嘗試一下你建議創建一個新彈出窗口的解決方案,然後我會告訴你它是如何實現的。 – 2014-09-23 15:07:50

+0

它不起作用創建一個新的Popup要麼......我認爲這個問題的發生是因爲我在主網格MainPageGrid.Children.Add(new CustomCursor());'中添加了我的遊標,因此所有高於網格將在我的光標之上。但是,我應該在哪裏擁有我的CustomCursor? – 2014-09-23 15:26:44

+0

嘗試使用VisualTreeHelper來獲取最頂層的元素。我認爲即使'Window.Current.Content'不是最頂層的,所以你需要找到它。 – 2014-09-23 15:29:50