在WPF应用程序中显示自定义光标

4

我有一组光标(.cur文件),想在我的WPF/VB.net应用程序中使用,而不会改变整个系统的光标。我假设我需要以某种方式使用每个WPF对象的“cursor”属性,但我不确定如何使用自己的光标。

我该怎么做才能实现这个目标呢?

3个回答

0
你尝试过使用文件路径重载来创建光标吗?
Cursor cursor = new Cursor("<path>");

或者说流?

一旦您拥有了光标对象,您可以将其分配给应该显示它的控件。(FrameworkElement.Cursor)


如果您将光标作为资源使用,例如在项目的光标文件夹中。

screen

你可以在XAML的任何地方引用它,例如:

<Window Cursor="Cursors/wait_il.cur">...

我能看出代码可能是如何工作的,但我需要一些上下文。这些片段应该放在哪里?我已经尝试了几个位置,但我一直收到异常。 - CodeMouse92
@JasonMc92:看看我更新的答案,这是最简单的方法。 - H.B.

0

假设光标在/Resources/文件夹中并且构建操作设置为Resource:

声明:

<TextBlock x:Key="MyCursor" Cursor="/Resources/grab.cur" />

然后在初始化器中将其应用于主窗口:

this.Cursor = (FindResource("MyCursor") as TextBlock).Cursor;

2
这是什么鬼东西?为什么不一开始就把它分配给窗口本身呢? - H.B.
我认为他所指的“system wide”是指整个应用程序范围?对我来说,使用new Cursor(<path>)时会抛出异常,因为它需要绝对路径。为了避免在代码后面进行处理,我让一个TextBlock创建了这个光标,因为TextBlock很小。这种方法可能有点粗糙,但是很稳定。但是,如果他愿意,他也可以编写代码以获取当前程序路径并读取光标文件之类的东西。 - Dominic

0

好的,既然H.B在这里向我抱怨,那么这里有一个类 :p

public class CustomCursor
{
    private System.Windows.Input.Cursor _cursor = null;
    public System.Windows.Input.Cursor Cursor
    {
        get
        {
            if (_cursor == null)
                _cursor = GetCursor();
            return _cursor;
        }
    }

    public string RelativePath { get; set; }

    public CustomCursor()
    {
    }

    public CustomCursor(string relativePath)
    {
        RelativePath = relativePath;
    }

    public System.Windows.Input.Cursor GetCursor()
    {
        if (RelativePath == null)
            throw new ArgumentNullException("You must set RelativePath first");

        string directory = Directory.GetCurrentDirectory();
        string absPath = directory + '\\' + RelativePath;

        if (!File.Exists(absPath))
            throw new FileNotFoundException();

        return new System.Windows.Input.Cursor(absPath);
    }
}

在代码后台中使用如下:

this.Cursor = new CustomCursor("grab.cur").Cursor;

或者在 XAML 中声明:

<local:CustomCursor x:Key="MyCursor" RelativePath="grab.cur"/>

并且像这样引用:

this.Cursor = (FindResource("MyCursor") as CustomCursor).Cursor;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接