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

时间:2014-02-27 22:20:12

标签: wpf keydown

我有一个WPF应用程序,我正在按键更新输出。 我的代码运行正常。因为我正在使用KeyUp事件,所以只有一点点落后。 当我尝试使用KeyDown时,它始终是一个角色。我已经尝试添加UpdateSourceTrigger,如下面的TextBox 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>

所有字符在KeyUp事件中都可以按预期使用。我该怎么做才能确保KeyDown事件中的所有字符都可用?

背后的代码看起来像这样

public MainWindow()
{
    InitializeComponent();
    this.KeyDown += new KeyEventHandler(MainWindow_KeyDown);
}

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

基于@ Jon的评论,我将我的代码更改为使用TextBox.TextChanged事件,它可以按我的意愿运行。所以现在当我按下一个键时,输出会随着字符添加到文本框而改变。我拥有它的方式,当我按下一个键时它不会更新输出。我只是不喜欢它所以试图解决这个问题。