WPF-为什么最后一个字符在keydown事件方法中不可见

WPF-为什么最后一个字符在keydown事件方法中不可见,wpf,keydown,Wpf,Keydown,我有一个WPF应用程序,我在其中更新按键输出。 我的代码运行良好。只是在使用KeyUp事件时感觉有点落后。 当我尝试使用KeyDown时,后面总是一个字符。我已经尝试添加UpdateSourceTrigger,如下面的文本框XAML所示 <TextBox Text="{Binding TheLine, UpdateSourceTrigger=PropertyChanged}" Behaviors:WatermarkTextBoxBehavior.EnableWaterma

我有一个WPF应用程序,我在其中更新按键输出。 我的代码运行良好。只是在使用KeyUp事件时感觉有点落后。 当我尝试使用KeyDown时,后面总是一个字符。我已经尝试添加UpdateSourceTrigger,如下面的文本框XAML所示

<TextBox 
    Text="{Binding TheLine, UpdateSourceTrigger=PropertyChanged}"
    Behaviors:WatermarkTextBoxBehavior.EnableWatermark="True"
    Behaviors:WatermarkTextBoxBehavior.Label="Please enter a numeric value"
    Behaviors:WatermarkTextBoxBehavior.LabelStyle="{StaticResource watermarkLabelStyle}" 
    Grid.Column="0" x:Name="txtLengthFrom" GotFocus="txtLengthFrom_GotFocus" FontSize="15" FontWeight="SemiBold"></TextBox>

KeyDown事件发生在密钥对您的属性生效之前。不确定为什么要这样做,但如果必须将其全部设置为keydown,则需要检查按下的键的KeyEventArgs。如果最终根据KeyEventArgs中的内容修改属性,则需要设置e.Handled=true以防止它发生两次(因为如果不这样做,它将在以后处理)

根据@Jon的评论,我将代码更改为使用TextBox.TextChanged事件,它可以按照我的意愿工作。所以现在当我按住一个键时,输出会随着字符添加到文本框中而改变。按照我的方式,当我按下一个键时,它不会更新输出。我只是不喜欢它,所以我试图解决它

这是一种奇怪的做事方式。为什么需要附加这样的处理程序来更新输出?如果您希望文本框的内容更改时发生某些事情,请将处理程序附加到
textbox.TextChanged
.Huh!这正是我想要的,代码也被简化了。谢谢你,伙计。
public MainWindow()
{
    InitializeComponent();
    this.KeyDown += new KeyEventHandler(MainWindow_KeyDown);
}

void MainWindow_KeyDown(object sender, KeyEventArgs e)
{
    UpdateOutput();
}