WPF中的触摸问题?

7

I made following application (as a test)

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,它会像要求的那样打开一个对话框窗口。在关闭它之后,窗口上的任何触摸都会打开对话框窗口,即使触摸不在TextBlock上。

这是一个错误吗?我能绕过这个问题吗?

编辑:我发布了一个解决方法,但实际的修复仍然很有用。


1
我有两个观察结果 - 第一,如果你移动窗口,问题就会停止;第二,在像这样的实际情况下,你可能想使用一个按钮(我知道这只是一个测试,所以这是一个有趣的问题)。也许这可以帮助你想出一些解决方案。 - user2509848
对不起,我找不到任何可用的东西。 - user2509848
@hosch250 感谢你的按钮提示。虽然它不是解决问题的答案,但这是一个变通方法。不过我想让按钮看起来像 TextBlock,所以我重新设计了按钮,并会很快发布我的解决方案。 - RazorEater
1个回答

0
对于遇到同样问题的其他人,这不是解决问题的方法,但它是一个解决办法。 我使用了一个按钮并重新设计它的样式,使其看起来像一个文本块。
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 相同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接