鼠標事件有個很重要的MouseEventArgs類型參數,通過調用這個類的方法和屬性,可以獲得很多與鼠標相關的信息。
MouseEventArgs提供了Ctrl和Shift這兩個布爾屬性,在處理鼠標事件時通過對這兩個布爾屬性的取值以判斷用戶是否按下了Ctrl或Shift鍵。
MouseEventArgs還提供了幾個非常有用的方法,其中比較常用的是GetPosition方法,用於獲取當前屬性所在的位置的信息,該方法的聲明如下:
public Point GetPosition(UIElement uiElement);
從聲明中可以看出該方法返回一個Point類型的值,可以通過Point的X和Y屬性來獲取鼠標當前所在位置的X座標和Y座標的值。
該方法需要一個UIElement類型的參數,可以是任何己經放於根Canvas中的派生自UIElement類型的對象。如果爲UIElement指定了一個值,則當前鼠標的座標值會相對於該對象。如果需要相對於根畫布的座標值,則指定null值即可。
下面的例子演示如何使用GetPosition方法來獲取當前鼠標位置信息,效果如圖所示。
示例程序分別顯示相對於矩形的座標位置和相對於根畫布的座標位置,通過MouseEventArgs類的GetPosition方法,實現非常簡單。
在XAML代碼中,繪製了一個矩形和幾個文本塊,用於顯示信息,代碼如下所示。
<Canvas x:Name="parentCanvas"
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Loaded="Page_Loaded"
x:Class="MouseEventArgsDemo.Page;assembly=ClientBin/MouseEventArgsDemo.dll"
Width="640"
Height="480"
Background="White"
>
<!--定義相對於矩形的顯示文本-->
<TextBlock Canvas.Left="10" Canvas.Top="50" Foreground="Red" Text="Rectangle:"></TextBlock>
<TextBlock x:Name="xText" Text="X:" Canvas.Left="100" Canvas.Top="50" Foreground="Red"></TextBlock>
<TextBlock x:Name="xValue" Canvas.Left="120" Canvas.Top="50" Foreground="Black"></TextBlock>
<TextBlock x:Name="yText" Text="Y:" Canvas.Left="150" Canvas.Top="50" Foreground="Red"></TextBlock>
<TextBlock x:Name="yValue" Canvas.Left="170" Canvas.Top="50" Foreground="Black"></TextBlock>
<!--定義相對於根畫布的顯示文本-->
<TextBlock Canvas.Left="250" Canvas.Top="50" Foreground="Red" Text="Canvas:"></TextBlock>
<TextBlock x:Name="xText1" Text="X:" Canvas.Left="320" Canvas.Top="50" Foreground="Red"></TextBlock>
<TextBlock x:Name="xValue1" Canvas.Left="340" Canvas.Top="50" Foreground="Black"></TextBlock>
<TextBlock x:Name="yText1" Text="Y:" Canvas.Left="390" Canvas.Top="50" Foreground="Red"></TextBlock>
<TextBlock x:Name="yValue1" Canvas.Left="410" Canvas.Top="50" Foreground="Black"></TextBlock>
<!--定義一個矩形,將處理此矩形的MouseMove事件以顯示座標-->
<Rectangle Canvas.Left="100" Canvas.Top="100" Width="300" Height="200" Fill="Red" x:Name="Rec1"></Rectangle>
</Canvas>
接下來在後置代碼中定義了矩形Rec1的MouseMove事件,調用MouseEventArgs類的GetPosition方法,代碼如下所示。
namespace MouseEventArgsDemo
{
public partial class Page : Canvas
{
public void Page_Loaded(object o, EventArgs e)
{
// Required to initialize variables
InitializeComponent();
Rec1.MouseMove += new MouseEventHandler(Rec1_MouseMove);
}
void Rec1_MouseMove(object sender, MouseEventArgs e)
{
//相對於矩形的座標位置
xValue.Text = e.GetPosition(Rec1).X.ToString();
yValue.Text=e.GetPosition(Rec1).Y.ToString();
//相對於根畫布的座標位置
xValue1.Text = e.GetPosition(null).X.ToString();
yValue1.Text = e.GetPosition(null).Y.ToString();
}
}
}