在WPF弹出窗口上保留自定义光标

本文关键字:保留 自定义 光标 窗口 WPF | 更新日期: 2023-09-27 17:58:46

我的应用程序中有一些自定义游标。我使用在这里的第二个答案中找到的信息来创建我的自定义光标。这很有效。我的问题是,当我把鼠标移到弹出菜单上时,鼠标会显示为默认的光标。奇怪的是,当我把鼠标移出弹出菜单时,我的自定义光标又回来了。好的,所以我把我的光标安装成这样:

UserControl.xaml:

    <TextBlock 
        x:Name="SupprimerV" 
        x:Key="SupprimerV" 
        Cursor="../Utils/Supprimer.cur"/> 

在UserControl.xaml.cs:中

this.Cursor = ((TextBlock)this.FindResource("SupprimerV")).Cursor;

然后我调用我自己的控件SimplePopup,它从Popup派生而来,如下所示:

_pop = new SimplePopup(this);  //Irrelevant information omitted

SimplePopup.cs:

public simplePopup(FrameworkElement relativeTo)
    {
        this._relativeTo = relativeTo;
        this.Cursor = relativeTo.Cursor; //Trying to set the cursor of the popup but dosent work
        ...
    }

我试着设置弹出光标,但似乎不起作用。光标在我的UserControl上运行良好,但当鼠标位于弹出菜单上时会失败。

我是不是错过了什么?是不是有什么东西阻止了我的光标在弹出菜单上正常工作?

感谢您的帮助,抱歉拼写错误^^

在WPF弹出窗口上保留自定义光标

好的,所以我找到了一种方法,使我的光标正确地出现在我的弹出窗口中。我的SimplePopup使用边界作为它的子元素。我试图将该边界的Cursor设置为_relativeTo光标,如下所示:

popBorder.Cursor = _relativeTo.Cursor;

它起了作用我想知道为什么,所以我做了一些研究,发现了一段有趣的文字:

Pro-WPF在c#2010-第6章第186页:"如果你想看到您的内容,因为它不会从您的窗口继承,您需要自己添加边界(border元素非常适合目的)。"http://archon.name/files/books/programming/Apress.Pro.WPF.in.C%23.2010.Windows.Presentation.Foundation.in.NET.4.pdf

很明显,弹出窗口不会继承其创建者的任何属性(包括光标)。

我认为,由于弹出窗口根本没有出现,他的光标属性没有沿着元素树传播。。。

这让我很惊讶,因为在我的主应用程序中,我将光标设置为树中的第一个元素,它似乎传播得很好,或者至少可以出现在子元素上。

我想知道是否还有其他原因,或者这种行为是否出现在WPF的其他地方。