使用 "mahapps.metro" KeyUp 事件加倍

KeyUp event is doubling using "mahapps.metro"

完成项目:https://uploadfiles.io/wz8ji

遵循代码:

代码 C#:

public partial class MainWindow : MetroWindow
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Textbox_KeyUp(object sender, KeyEventArgs e)
    {
        if (textbox.Text != string.Empty)
        {
            this.ShowMessageAsync("This is the title", "Some message");
        }
    }
}

代码xaml:

<Controls:MetroWindow x:Class="Wpf.MainWindow"
        xmlns:Controls="http://metro.mahapps.com/winfx/xaml/controls"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <TabControl HorizontalAlignment="Left" Height="324" Margin="88,31,0,0" VerticalAlignment="Top" Width="605">
            <TabItem Header="TabItem">
                <Grid Background="#FFE5E5E5">
                    <TextBox 
                        x:Name="textbox"
                        HorizontalAlignment="Left"
                        Height="23"
                        Margin="10,10,0,0"
                        TextWrapping="Wrap"
                        Text="TextBox"
                        VerticalAlignment="Top"
                        Width="120"
                        KeyUp="Textbox_KeyUp"/>
                </Grid>
            </TabItem>
            <TabItem Header="TabItem">
                <Grid Background="#FFE5E5E5"/>
            </TabItem>
        </TabControl>
    </Grid>
</Controls:MetroWindow>

在我的文本框中,当我快速擦除并键入时,事件重复了。当我正常删除并键入“1”时,一切都是 fine.The 问题是当我删除并键入任何非常快的字符时。当我快速执行此操作时,事件重复了。

我也用这个:http://mahapps.com/

我在没有使用 "mahapps" 的情况下创建了另一个项目,它工作正常。

事情是这样发生的:

按下 退格键 并快速释放 + 1 键。

有什么解决办法吗?

嗯,我已经将你的代码提交给不同的测试,方法没有重复...

int i = 0;
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
    if(((TextBox)sender).Text != string.Empty)
    {
        System.Diagnostics.Debug.WriteLine("Hello " + ++i);
    }
 }

Verify that another active control has no associated keyboard event, that may be the problem.

我已经测试了你的代码,它运行良好

正如你在聊天中告诉我的那样,你快速按下退格键 + 1,好吧,错误是你的代码检测到只要 TextBox 不为空,任何键的脉动,所以,你必须做的是限制使用返回

private void Textbox_KeyUp(object sender, KeyEventArgs e)
{
    if (textbox.Text != string.Empty && e.Key != Key.Back)
     {
         this.ShowMessageAsync("This is the title", "Some message");
     }
}