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

时间:2011-06-08 18:24:12

标签: c# wpf

我的应用程序中有一些自定义游标。 我使用 informations found on the second answer here来创建自定义光标。这很好用。 我的问题是,当我将鼠标移到Popup上时,鼠标显示为默认的Cursor。奇怪的是,当我将鼠标移出Popup时,我的自定义光标会回来。 好的,我就这样实现我的光标:

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上工作正常但在鼠标悬停在Popup上时失败。

我错过了什么吗? 是否会阻止我的光标在弹出窗口上正常工作?

Thnx的帮助, 对不起拼写错误^^

1 个答案:

答案 0 :(得分:0)

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

popBorder.Cursor = _relativeTo.Cursor;

它有效 我想知道为什么我做了一些研究,我找到了这篇有趣的文章:

Pro#WPF in c#2010 - 第6章第186页:“如果要查看,必须设置Background属性 您的内容,因为它不会从您的窗口继承而且您需要 自己添加边框(Border元素非常适用于此 目的)。“http://archon.name/files/books/programming/Apress.Pro.WPF.in.C%23.2010.Windows.Presentation.Foundation.in.NET.4.pdf

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

我认为因为弹出窗口根本没有外观,所以他的光标属性在其元素树中传播...

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

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