Отображение пользовательского курсора в приложении WPF


У меня есть набор курсоров (.cur files), которые я хочу использовать с моим приложением WPF/VB. net, не изменяя курсоры в масштабах всей системы. Я предполагаю, что каким-то образом буду использовать свойство "курсор" каждого объекта WPF, но я не уверен, как использовать мои собственные курсоры.

Что я должен сделать, чтобы достичь этого?

3 4

3 ответа:

Вы пробовали использовать перегрузку пути к файлу для создания курсора?

Cursor cursor = new Cursor("<path>");

Или поток, если уж на то пошло?

Если у вас есть объект курсора, вы можете назначить его элементам управления, где он должен быть показан. (FrameworkElement.Cursor)


Если вы используете курсор в качестве ресурса, например, в папке курсоров в вашем проекте

экран

Вы можете ссылаться на него в любом месте вашего XAML, например

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

Предположим, что курсор находится в папке/ Resources / и действие сборки имеет значение Resource:

Объявить:

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

Затем применитесь к главному окну в инициализаторе:

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

Хорошо, так как 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;