如何检查 wpf C# 中的鼠标按钮是左键还是右键?
How can I check if mouse button is left or right in wpf C#?
我正在尝试这段代码,实际上我只创建了一个位于 Click="button_Click"
上的事件处理程序。
XAML:
<Window x:Class="WPFAPP.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WPFAPP"
mc:Ignorable="d"
Title="Window1" Height="447.625" Width="562">
<Grid>
<Button x:Name="btn1" Content="Button1" Click="button_Click" HorizontalAlignment="Left" Margin="26,22,0,0" VerticalAlignment="Top" Width="75"/>
<Button x:Name="btn2" Content="Button2" Click="button_Click" HorizontalAlignment="Left" Margin="26,61,0,0" VerticalAlignment="Top" Width="75"/>
<Button x:Name="btn3" Content="Button3" Click="button_Click" HorizontalAlignment="Left" Margin="26,100,0,0" VerticalAlignment="Top" Width="75"/>
<Button x:Name="btn4" Content="Button4" Click="button_Click" HorizontalAlignment="Left" Margin="26,137,0,0" VerticalAlignment="Top" Width="75"/>
<Button x:Name="btn5" Content="Button5" Click="button_Click" HorizontalAlignment="Left" Margin="26,174,0,0" VerticalAlignment="Top" Width="75"/>
</Grid>
</Window>
C# 背后的代码:
private void button_Click(object sender, RoutedEventArgs e)
{
Button button = (Button)sender;
if(e.Equals(Mouse.RightButton))
{
button.ClearValue(Button.BackgroundProperty);
button.Background = Brushes.Green;
}
}
点击仅适用于最有限的交互,如果您使用更高级的鼠标事件,您将获得一个 MouseButtonEventArgs,它会为您提供有关该事件的所有详细信息。
原因是点击不是鼠标事件,你也可以用触摸、手写笔触发它,你甚至可以在突出显示时按Return用键盘触发它
所以试试 MouseDown、MouseUp 或 DoubleClick 代替
例如
<Button MouseDoubleClick="Button_MouseDoubleClick" >Click me</Button>
private void Button_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
if(e.ChangedButton == MouseButton.Right)
{
}
e.Handled = true;
}
或鼠标按下
<Button MouseDown="Button_MouseDown" >Click me</Button>
private void Button_MouseDown(object sender, MouseButtonEventArgs e)
{
if(e.ChangedButton == MouseButton.Right)
{
}
e.Handled = true;
}
最好为鼠标左键和鼠标右键设置单独的事件处理程序。如果您需要按照单击的按钮工作。以下是我的方法。
<Button MouseLeftButtonDown="Button_MouseLeftButtonDown" MouseRightButtonDown="Button_MouseRightButtonDown"></Button>
下面是隐藏代码。
private void Button_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
}
private void Button_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
}
如果要获取触发事件的按钮,可以勾选e.OriginalSource
属性。
通过使用 MVVM,您可以为 左键双击 ListView 项目 例如:
要在“Window”或“UserControl”中添加的命名空间
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
列表视图:
<ListView x:Name="lvComputers"
IsSynchronizedWithCurrentItem="True"
...>
<!-- Double Click -->
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction Command="{Binding ListViewComputers_MouseDoubleClick}"
CommandParameter="{Binding ElementName=lvComputers, Path=SelectedItem}"
/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ListView>
然后是绑定事件:
private void ListViewComputers_MouseDoubleClick(object obj)
{
//Allow only left button double click
if (Mouse.LeftButton == MouseButtonState.Pressed)
{
//Code to execute on Left Button Double Click
}
}
“鼠标”需要:
using System.Windows.Input;
我正在尝试这段代码,实际上我只创建了一个位于 Click="button_Click"
上的事件处理程序。
XAML:
<Window x:Class="WPFAPP.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WPFAPP"
mc:Ignorable="d"
Title="Window1" Height="447.625" Width="562">
<Grid>
<Button x:Name="btn1" Content="Button1" Click="button_Click" HorizontalAlignment="Left" Margin="26,22,0,0" VerticalAlignment="Top" Width="75"/>
<Button x:Name="btn2" Content="Button2" Click="button_Click" HorizontalAlignment="Left" Margin="26,61,0,0" VerticalAlignment="Top" Width="75"/>
<Button x:Name="btn3" Content="Button3" Click="button_Click" HorizontalAlignment="Left" Margin="26,100,0,0" VerticalAlignment="Top" Width="75"/>
<Button x:Name="btn4" Content="Button4" Click="button_Click" HorizontalAlignment="Left" Margin="26,137,0,0" VerticalAlignment="Top" Width="75"/>
<Button x:Name="btn5" Content="Button5" Click="button_Click" HorizontalAlignment="Left" Margin="26,174,0,0" VerticalAlignment="Top" Width="75"/>
</Grid>
</Window>
C# 背后的代码:
private void button_Click(object sender, RoutedEventArgs e)
{
Button button = (Button)sender;
if(e.Equals(Mouse.RightButton))
{
button.ClearValue(Button.BackgroundProperty);
button.Background = Brushes.Green;
}
}
点击仅适用于最有限的交互,如果您使用更高级的鼠标事件,您将获得一个 MouseButtonEventArgs,它会为您提供有关该事件的所有详细信息。
原因是点击不是鼠标事件,你也可以用触摸、手写笔触发它,你甚至可以在突出显示时按Return用键盘触发它
所以试试 MouseDown、MouseUp 或 DoubleClick 代替
例如
<Button MouseDoubleClick="Button_MouseDoubleClick" >Click me</Button>
private void Button_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
if(e.ChangedButton == MouseButton.Right)
{
}
e.Handled = true;
}
或鼠标按下
<Button MouseDown="Button_MouseDown" >Click me</Button>
private void Button_MouseDown(object sender, MouseButtonEventArgs e)
{
if(e.ChangedButton == MouseButton.Right)
{
}
e.Handled = true;
}
最好为鼠标左键和鼠标右键设置单独的事件处理程序。如果您需要按照单击的按钮工作。以下是我的方法。
<Button MouseLeftButtonDown="Button_MouseLeftButtonDown" MouseRightButtonDown="Button_MouseRightButtonDown"></Button>
下面是隐藏代码。
private void Button_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
}
private void Button_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
}
如果要获取触发事件的按钮,可以勾选e.OriginalSource
属性。
通过使用 MVVM,您可以为 左键双击 ListView 项目 例如:
要在“Window”或“UserControl”中添加的命名空间
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
列表视图:
<ListView x:Name="lvComputers"
IsSynchronizedWithCurrentItem="True"
...>
<!-- Double Click -->
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction Command="{Binding ListViewComputers_MouseDoubleClick}"
CommandParameter="{Binding ElementName=lvComputers, Path=SelectedItem}"
/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ListView>
然后是绑定事件:
private void ListViewComputers_MouseDoubleClick(object obj)
{
//Allow only left button double click
if (Mouse.LeftButton == MouseButtonState.Pressed)
{
//Code to execute on Left Button Double Click
}
}
“鼠标”需要:
using System.Windows.Input;