気になったのでTouchとMouseとStylusイベントの動きを軽く見てみました。軽くというのは時間がないので****Down系イベントだけ拾ってみました。Backgroundを指定したBorderを置いてCheckBoxを3つおく。
<Window x:Class="StylusCheckApp.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition/> </Grid.RowDefinitions> <Border BorderBrush="Black" BorderThickness="1" Margin="10" Grid.Row="3" StylusDown="Border_StylusDown" MouseDown="Border_MouseDown" TouchDown="Border_TouchDown" Background="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> <CheckBox x:Name="checkBoxStylus" Content="Handle Stylus" Margin="10"/> <CheckBox x:Name="checkBoxMouse" Content="Handle Mouse" Grid.Row="1" Margin="10"/> <CheckBox x:Name="checkBoxTouch" Content="Handle Touch" Grid.Row="2" Margin="10"/> </Grid> </Window>
んで、コードビハインドでデバッグログを吐くだけ。
using System.Diagnostics; using System.Windows; using System.Windows.Input; namespace StylusCheckApp { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void Border_StylusDown(object sender, StylusDownEventArgs e) { Debug.WriteLine("StylusDown"); e.Handled = this.checkBoxStylus.IsChecked.Value; } private void Border_MouseDown(object sender, MouseButtonEventArgs e) { Debug.WriteLine("MouseDown"); e.Handled = this.checkBoxMouse.IsChecked.Value; } private void Border_TouchDown(object sender, TouchEventArgs e) { Debug.WriteLine("TouchDown"); e.Handled = this.checkBoxTouch.IsChecked.Value; } } }
実行してみる。
マウスクリック MouseDown タッチ StylusDown TouchDown MouseDown スタイラスでツン StylusDown MouseDown
ちょっとびっくりしたのがタッチしても最初のイベントはスタイラス。ほほう…。ではStylusでHandledをTrueにすると…。
マウスクリック MouseDown タッチ StylusDown MouseDown スタイラスでツン StylusDown MouseDown
タッチイベントはスキップされたけどマウスイベントにはいっちゃうのか。んじゃ、タッチイベントだけHandledをTrueにすると…。
マウスクリック MouseDown タッチ StylusDown TouchDown MouseDown スタイラスでツン StylusDown MouseDown
ほう…。
まとめ
****Down系イベントだけを見るとMouseイベントの前にStylus→Touch→Mouseときたらタッチ操作で、Stylus→MouseときたらスタイラスでMouseだけだとマウスということになります。
Preview****系とか、その他もろもろのStylus*****系イベントとかを駆使すると、もっと何かかわるのかもしれないけど、続きは後日の自分か誰か…。