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

时间:2018-04-01 01:57:12

标签: c# wpf 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>

在我的文本框中,当我快速删除并键入时,事件将重复。当我删除并键入&#34; 1&#34;通常,一切都很好。问题是我删除并输入任何非常快的字符。当我快速执行此操作时,事件将重复。

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

我在没有使用&#34; mahapps&#34;的情况下创建了另一个项目,它运作正常。

以下是它的发生方式:

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

enter image description here

任何解决方案?

1 个答案:

答案 0 :(得分:2)

好吧,我已将您的代码提交给不同的测试,并且该方法没有重复...

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

验证另一个活动控件没有关联的键盘事件,这可能是问题所在。

Your code works correctly

我已经测试了你的代码并且运行良好

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

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