Silvelright 自定义鼠标指针样式

查询了Silverlight4 SDK,似乎依旧不支持自定义鼠标样式。

解决方案:代码动态创建一个鼠标png图片,设置cursor=cursors.None ,使用鼠标移动事件跟随

    一个好的游戏或者线上程序,离不开一款样式多变的鼠标,下面是调用方法:

1、在MainPage的Loaded事件中使用SetMouse(RootCanvas)方法声明根Canvas对象。

2、使用调用SetCursor(...)来动态设置鼠标图片。

代码:

#Region "鼠标指针图片"    Dim ControlMouseInt As Integer = -1
    Shared MouseTag As String() = {}
    Shared IsCursorChanged As Boolean = False
    ''' <summary>
    ''' 设置鼠标指针
    ''' </summary>
    ''' <param name="CursorImgUrl">指针图片地址</param>
    ''' <param name="Width">指针宽度</param>
    ''' <param name="Height">指针高度</param>
    ''' <param name="ImgFixX">焦点修正X</param>
    ''' <param name="ImgFixY">焦点修正Y</param>
    ''' <param name="Other">其他</param>
    ''' <remarks></remarks>
    Sub SetCursor(ByVal CursorImgUrl As String, ByVal Width As Integer, ByVal Height As Integer, ByVal ImgFixX As Integer, ByVal ImgFixY As Integer, ByVal Other As String)
        MouseTag = {CursorImgUrl, Width.ToString, Height.ToString, ImgFixX.ToString, ImgFixY.ToString, Other.ToString}
        IsCursorChanged = True
    End Sub    ''' <summary>
    ''' 初始化鼠标指针环境
    ''' </summary>
    ''' <param name="RootCanvas">根Canvas元素</param>
    ''' <remarks></remarks>
    Sub SetMouse(ByVal RootCanvas As Canvas)
        AddHandler RootCanvas.MouseLeftButtonUp, AddressOf ChkCursor
        AddHandler RootCanvas.MouseLeftButtonDown, AddressOf ChkCursor
        AddHandler RootCanvas.MouseMove, AddressOf ChkCursor
    End Sub    Sub ChkCursor(ByVal sender As Object, ByVal e As MouseEventArgs)
        Dim RootElement As Canvas = sender
        If MouseTag.Length > 0 Then
            RootElement.SetValue(Canvas.CursorProperty, Cursors.None) '禁止原指针
            If IsCursorChanged = True Then
                If ControlMouseInt > 0 Then
                    RootElement.Children(ControlMouseInt).SetValue _
                        (Image.SourceProperty, New BitmapImage((New Uri(MouseTag(0), UriKind.Relative))))
                Else
                    Dim CursorImg As Image = New Image
                    CursorImg.Source = New BitmapImage(New Uri(MouseTag(0), UriKind.Relative))
                    RootElement.Children.Add(CursorImg)
                    ControlMouseInt = RootElement.Children.IndexOf(CursorImg)
                End If
                With RootElement.Children(ControlMouseInt)
                    .SetValue(Canvas.WidthProperty, Convert.ToDouble(MouseTag(1)))
                    .SetValue(Canvas.HeightProperty, Convert.ToDouble(MouseTag(2)))
                End With
                IsCursorChanged = False
            End If
            If ControlMouseInt > 0 Then
                With RootElement.Children(ControlMouseInt)
                    .SetValue(Canvas.ZIndexProperty, 8888)
                    .SetValue(Canvas.LeftProperty, e.GetPosition(Nothing).X + Convert.ToDouble(MouseTag(3)))
                    .SetValue(Canvas.TopProperty, e.GetPosition(Nothing).Y + Convert.ToDouble(MouseTag(4)))
                    .IsHitTestVisible = False
                End With
            End If
        End If
    End Sub#End Region

 

疗效如下:

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值