触摸WPF中的Bug

本文关键字:Bug 中的 WPF 触摸 | 更新日期: 2023-09-27 18:28:14

我进行了以下应用程序(作为测试)

XAML:

<Window x:Class="GUITest.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 Background="Transparent">
        <TextBlock Text="openDialog" Background="Red"  HorizontalAlignment="Center" VerticalAlignment="Top" MouseDown="TextBlock_MouseDown" />
    </Grid>
</Window>

C#:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }
    private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e)
    {
        OpenFileDialog dlg = new OpenFileDialog();
        Nullable<bool> result = dlg.ShowDialog();
        if (result == true)
        {
            Console.Out.WriteLine(dlg.FileName);
        }
    }
}

我捕获mouseDown事件,因为它同时捕获鼠标按下事件和触摸按下事件。该代码具有预期的鼠标单击行为。触摸给我带来了一些麻烦。

如果我触摸文本块,它会按要求打开一个对话框窗口。关闭后,对窗口的任何触摸都会打开对话框窗口,即使触摸不在TextBlock上。

这是个虫子吗?我能解决这个问题吗?

编辑:我发布了一个解决方法,实际的修复仍然是使用完整的

触摸WPF中的Bug

对于遇到同样问题的其他人。这不是解决问题的方法,但它是一种变通方法。我使用了一个按钮,并将其重新设计为TextBlock

XAML:

<Grid Background="Transparent">
   <Button HorizontalAlignment="Left" VerticalAlignment="Top" Click="Button_Click" Content="openDialog">
        <Button.Template>
            <ControlTemplate TargetType="Button">
                 <ContentPresenter />
            </ControlTemplate>
        </Button.Template>
   </Button>
</Grid>

Button_Click的代码与TextBlock_MouseDown 相同