在WPF中更改光标有时会起作用,有时不会?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)

在我的几个用户控件中,我通过使用改变了光标

this.Cursor = Cursors.Wait;

当我点击某件东西时。

现在我想在按钮点击的WPF页面上做同样的事情。当我将鼠标悬停在我的按钮上时,光标变成一只手,但是当我点击它时,它不会更改为等待光标。我想知道这是否与这是一个按钮的事实有关,或者因为这是一个页面而不是用户控件?这似乎很奇怪的行为。

提问于
用户回答回答于

只有当它超过特定页面/用户控件时,你是否需要将光标作为“等待”光标?如果没有,我会建议使用Mouse.OverrideCursor

Mouse.OverrideCursor = Cursors.Wait;
try
{
    // do stuff
}
finally
{
    Mouse.OverrideCursor = null;
}

这会覆盖你的应用程序的光标而不是其UI的一部分,因此您描述的问题将消失。

用户回答回答于

我们在应用程序中执行此操作的一种方法是使用IDisposable,然后使用using(){}块来确保光标在完成时重置。

public class OverrideCursor : IDisposable
{

  public OverrideCursor(Cursor changeToCursor)
  {
    Mouse.OverrideCursor = changeToCursor;
  }

  #region IDisposable Members

  public void Dispose()
  {
    Mouse.OverrideCursor = null;
  }

  #endregion
}

然后在你的代码中:

using (OverrideCursor cursor = new OverrideCursor(Cursors.Wait))
{
  // Do work...
}

覆盖将在以下两种情况下结束:达到使用语句的结尾或; 如果抛出异常并且控制在语句结束之前离开语句块。

扫码关注云+社区