查询了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
疗效如下: