Wpf 为什么在着陆和点击之间忽略RoutedEventArgs.处理

Wpf 为什么在着陆和点击之间忽略RoutedEventArgs.处理,wpf,touch,Wpf,Touch,我正在尝试支持同一事件的着陆和单击 您会注意到,下面的代码不是在绿色和红色之间切换,而是闪烁红色并返回绿色。据我所知,这是因为click事件忽略了RoutedEvent的Handled属性。我需要这两个工作与触摸和鼠标 XAML: 注意:我之所以不单独使用单击(应该与触摸)是因为在我这样做的具体情况下,第一次触摸按钮时什么都没有发生。所有后续的操作都很好。这是一个单独的问题,我不能问,因为我不能在一个简单的代码示例中重现它。此外,此行为仅在windows设置为120 DPI时发生。在96 DPI

我正在尝试支持同一事件的
着陆
单击

您会注意到,下面的代码不是在绿色和红色之间切换,而是闪烁红色并返回绿色。据我所知,这是因为click事件忽略了
RoutedEvent
Handled
属性。我需要这两个工作与触摸和鼠标

XAML:


注意:我之所以不单独使用
单击
(应该与
触摸
)是因为在我这样做的具体情况下,第一次触摸按钮时什么都没有发生。所有后续的操作都很好。这是一个单独的问题,我不能问,因为我不能在一个简单的代码示例中重现它。此外,此行为仅在windows设置为120 DPI时发生。在96 DPI中,一切正常。我不知道

点击事件是鼠标点击/触碰而不是*触碰的结果(除非您更改按钮的点击行为)。此答案提供了一种很好的方法,可以全局阻止将鼠标事件升级为元素的触摸事件:

<Window x:Class="CodeSpace.WPF.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" Background="LightGreen">
    <Grid>
        <Button Content="Touch Me" HorizontalAlignment="Center" VerticalAlignment="Center" Height="75" Width="75" Click="OnClick" TouchDown="OnClick"/>
    </Grid>
</Window>
using System.Windows;
using System.Windows.Media;

namespace CodeSpace.WPF
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void OnClick(object sender, RoutedEventArgs e)
        {
            Background = (Background.Equals(Brushes.LightGreen)) ? Brushes.LightCoral : Brushes.LightGreen;

            e.Handled = true;
        }
    }
}