【问题标题】:Display Custom Cursor in WPF Application在 WPF 应用程序中显示自定义光标
【发布时间】:2011-08-18 03:05:05
【问题描述】:

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

我应该怎么做才能做到这一点?

【问题讨论】:

    标签: wpf vb.net mouse-cursor


    【解决方案1】:

    您是否尝试过使用文件路径重载来创建游标?

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

    或者关于那件事的流?

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


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

    您可以在 XAML 中的任何位置引用它,例如

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

    【讨论】:

    • 嗯,我可以看到代码是如何工作的,但我需要一些上下文。我把这些sn-ps放在哪里?我已经尝试了几个地方,但我不断收到异常。
    • @JasonMc92:查看我更新的答案,了解最简单的方法。
    【解决方案2】:

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

    声明:

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

    然后在初始化器中应用到主窗口:

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

    【讨论】:

    • 这到底是什么荒谬的黑客行为?为什么不首先将其分配给窗口本身?
    • 按系统范围我认为他的意思是应用范围? new Cursor() 为我抛出了一个异常,因为它想要一个绝对路径。为了避免后面的代码,我让 TextBlock 创建光标,因为 TextBlock 很小。是的,但很稳定。但是是的,如果他愿意,他可以编写代码来获取当前程序路径,读取光标文件或其他内容。
    【解决方案3】:

    好吧,因为 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;
    

    【讨论】:

      猜你喜欢
      • 2010-09-07
      • 1970-01-01
      • 2020-06-12
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      • 2012-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多