为什么 RoutedEventArgs.Handle 在 TouchDown 和 Click 之间被忽略



我正在尝试通过同一事件支持TouchDownClick

您会注意到,以下代码不是在绿色和红色之间切换,而是闪烁红色并返回到绿色。据我所知,这是因为单击事件忽略了RoutedEventHandled属性。我需要它来与触摸和鼠标一起使用。

XAML:

<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;
        }
    }
}

注意:我不只是单独使用Click(应该与Touch一起使用)的原因是因为在我的特定情况下,当我这样做时,第一次触摸按钮时没有任何反应。所有后续的触摸都工作得很好。这是一个单独的问题,我不能问,因为我无法在简单的代码示例中重现它。此外,仅当窗口设置为 120 DPI 时,才会发生此行为。在 96 DPI 中一切正常。我不知道!

单击事件是 MouseUp/TouchUp 而不是 *Down 的结果(除非您更改按钮的 ClickBehavior)。 此答案有一个很好的方法来全局阻止将鼠标事件提升为触摸元素的事件:https://stackoverflow.com/a/19540120/518955

最新更新