【WPF】自定义鼠标样式

 /// <summary>
    /// This class allow you create a Cursor form a Bitmap
    /// </summary>
    internal class BitmapCursor : SafeHandle
    {
        public override bool IsInvalid
        {
            get
            {
                return handle == (IntPtr)(-1);
            }
        }

        public static Cursor CreateBmpCursor(Bitmap cursorBitmap)
        {
            var c = new BitmapCursor(cursorBitmap);
            return CursorInteropHelper.Create(c);
        }

        public static Bitmap BitmapSourceToBitmap(BitmapSource source)
        {
            using (var stream = new MemoryStream())
            {
                var e = new BmpBitmapEncoder();
                e.Frames.Add(BitmapFrame.Create(source));
                e.Save(stream);
                var bmp = new Bitmap(stream);
                return bmp;
            }
        }

        protected BitmapCursor(Bitmap cursorBitmap)
            : base((IntPtr)(-1), true)
        {
            handle = cursorBitmap.GetHicon();
        }

        protected override bool ReleaseHandle()
        {
            bool result = DestroyIcon(handle);

            handle = (IntPtr)(-1);

            return result;
        }

        private static Cursor CreateMyCursor()
        {
            const int w = 25;
            const int h = 25;
            const int f = 4;

            var bmp = new Bitmap(w, h);

            Graphics g = Graphics.FromImage(bmp);
            g.SmoothingMode = SmoothingMode.HighQuality;
            g.InterpolationMode = InterpolationMode.HighQualityBicubic;

            var pen = new Pen(Brushes.Black, 2.0F);

            g.DrawEllipse(pen, new Rectangle(f, f, w - 2 * f, w - 2 * f));

            g.Flush();
            g.Dispose();
            pen.Dispose();

            return BitmapCursor.CreateBmpCursor(bmp);
        }

        [DllImport("user32")]
        private static extern bool DestroyIcon(IntPtr hIcon);
    }

 

WPF 中每个光标通过一个System.Windows.Input.Cursor表示,获取Cursor对象的最简单方法是使用Cursor类(位于System.Windows.Input名称空间)的静态属性。

如:

this.Cursor=Cursors.wait;  或<Button Cursor="wait">help</Button>

但是有一个例外,通过使用ForceCursor属性,父元素会覆盖子元素的光标位置,当把该属性设置为true时,会忽略子元素的Cursor属性,并且父元素的光标会被应用到内部的所有内容。

为了移除应用程序范围的光标覆盖设置,需要将Mouse.OverrideCursor属性设置为null

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF (Windows Presentation Foundation) 的 DatePicker 控件可以通过自定义样式来改变其外观和行为。要自定义 DatePicker 的样式,可以按照以下步骤进行操作: 1. 创建一个新的 WPF 项目,并在 XAML 文件中添加一个 DatePicker 控件。 2. 打开 DatePicker 控件的样式模板,可以通过在 XAML 中使用 `<DatePicker.Style>` 标签来指定样式。 3. 在样式模板中,可以自定义 DatePicker 的外观元素,比如边框、背景、按钮样式等。可以使用 XAML 标签来控制这些元素的属性和样式。 4. 若要自定义 DatePicker 的日期选择器弹出窗口的样式,可以在样式模板中添加 `<DatePicker.CalendarStyle>` 标签,并在其中定义日期选择器的样式。 5. 可以通过修改样式模板中的触发器和视觉状态来改变 DatePicker 在不同状态下的外观和行为。例如,可以自定义 DatePicker 在鼠标悬停或获取焦点时的效果。 6. 可以通过在样式模板中添加触发器或行为来定义 DatePicker 的交互行为。例如,可以添加一个触发器来在选择日期后自动关闭日期选择器弹出窗口。 7. 调整样式模板和元素的属性来满足个性化需求。可以更改颜色、字体、大小等属性,以及添加自定义绑定和动画效果。 自定义 DatePicker 的样式需要了解一些基本的 WPF 样式模板和控件元素的知识,以便能够正确地修改和调整样式。可以参考 MSDN 或其他 WPF 相关的教程、博客和文档来获取更多关于自定义样式的详细信息和示例代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值