如何在Metro风格的C#应用程序中获取按下的指针类型(鼠标左键或鼠标右键)?我没有在任何Metro风格的UI元素中找到MouseLeftButtonDown
事件处理程序。我应该使用PointerPressed
事件,但我不知道如何获得按下哪个按钮。
答案 0 :(得分:9)
PointerPressed足以处理鼠标按钮:
void MainPage_PointerPressed(object sender, PointerRoutedEventArgs e)
{
// Check for input device
if (e.Pointer.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Mouse)
{
var properties = e.GetCurrentPoint(this).Properties;
if (properties.IsLeftButtonPressed)
{
// Left button pressed
}
else if (properties.IsRightButtonPressed)
{
// Right button pressed
}
}
}
答案 1 :(得分:3)
您可以使用以下事件来确定使用的指针和按下的按钮。
private void Target_PointerMoved(object sender, PointerRoutedEventArgs e)
{
Windows.UI.Xaml.Input.Pointer ptr = e.Pointer;
Windows.UI.Input.PointerPoint ptrPt = e.GetCurrentPoint(Target);
if (ptrPt.Properties.IsLeftButtonPressed)
{
//Do stuff
}
if (ptrPt.Properties.IsRightButtonPressed)
{
//Do stuff
}
}
答案 2 :(得分:0)
从事UWP项目和以前的答案,例如 Properties.IsLeftButtonPressed / IsRightButtonPressed对我不起作用。这些值总是错误的。我在调试过程中意识到,Properties.PointerUpdateKind正在根据鼠标按钮进行更改。这是对我有用的结果:
var properties = e.GetCurrentPoint(this).Properties;
if (properties.PointerUpdateKind == Windows.UI.Input.PointerUpdateKind.LeftButtonReleased)
{
}
else if (properties.PointerUpdateKind == Windows.UI.Input.PointerUpdateKind.RightButtonReleased)
{
}
else if (properties.PointerUpdateKind == Windows.UI.Input.PointerUpdateKind.MiddleButtonReleased)
{
}
PointerUpdateKind中有更多选项,例如示例中的ButtonPressed变量和XButton变量,例如XButton1Pressed,XButton2Released等。