2014-09-19 69 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