C# WinUI 3アプリを作っていく途中で、調べたことを忘録的に投稿します。今回はWinUI3プロジェクトでマウスのボタンを押している間だけポインターの移動を検出したい場合の手順です。
イベントを準備
今回はXAMLに配置したスタックパネルにイベントを追加していきます。
.xaml ファイルを編集して[PointerPressed]と[PointerReleased]、[PointerMoved]のイベントを追加します。
<StackPanel Width="640" Height="40" PointerPressed="StackPanel_PointerPressed" PointerReleased="StackPanel_PointerReleased" PointerMoved="StackPanel_PointerMoved">
...
</StackPanel>
これでスタックパネル上でマウスのクリックと移動時のイベントに処理が追加できます。
押している間だけポインター移動を検出する
マウスのボタンを押している間だけ、ポインターの移動を検出したいので状態を管理する変数を追加します。
bool IsMouseMove = false;
Point lastLabelPoint = new Point();
追加した変数を使って[PointerPressed]と[PointerReleased]イベントに処理を追加します。
private void StackPanel_PointerPressed(object sender, PointerRoutedEventArgs e)
{
if (IsLabelMouseMove == false)
{
if (e.Pointer.PointerDeviceType == Microsoft.UI.Input.PointerDeviceType.Mouse)
{
IsLabelMouseMove = true;
Microsoft.UI.Input.PointerPoint ptrPt = e.GetCurrentPoint((UIElement)sender);
if (ptrPt != null)
{
lastLabelPoint = ptrPt.Position;
}
}
}
}
private void StackPanel_PointerReleased(object sender, PointerRoutedEventArgs e)
{
if (IsLabelMouseMove == true)
{
if (e.Pointer.PointerDeviceType == Microsoft.UI.Input.PointerDeviceType.Mouse)
{
IsLabelMouseMove = false;
}
}
}
最後に[PointerMoved]イベントでポインターが移動した際の処理を追加します。
private void StackPanel_PointerMoved(object sender, PointerRoutedEventArgs e)
{
if (IsLabelMouseMove == true)
{
if (e.Pointer.PointerDeviceType == Microsoft.UI.Input.PointerDeviceType.Mouse)
{
Microsoft.UI.Input.PointerPoint ptrPt = e.GetCurrentPoint((UIElement)sender);
if (ptrPt != null)
{
if(((int)ptrPt.Position.Y) == 0)
{
IsLabelMouseMove = false;
return;
}
if (lastLabelPoint.X < ptrPt.Position.X)
{
//マウスポインターが右に移動した場合
}
if (lastLabelPoint.X > ptrPt.Position.X)
{
//マウスポインターが左に移動した場合
}
lastLabelPoint = ptrPt.Position;
}
}
}
}
実行すると、スタックパネル上でマウスの左ボタンをクリックしている間だけポインターが移動した処理が実行されます
まとめ
今回は、今回はWinUI3プロジェクトでマウスのボタンを押している間だけポインターの移動を検出する方法について紹介しました。
Xaml上に配置したコントロールの[PointerPressed]と[PointerReleased]、[PointerMoved]のイベントと、マウスボタンの状態を変数で管理してボタンを押している間だけ処理の実行が可能でした。
WinUI 3 アプリでマウスのボタンを押している間だけ処理がしたい人の参考になれば幸いです。
スポンサーリンク
最後までご覧いただき、ありがとうございます。
