2014-02-27 4 views
1

키 누르기에서 출력을 업데이트하는 WPF 앱이 있습니다. 내 코드가 정상적으로 작동합니다. KeyUp 이벤트를 사용할 때 조금 뒤떨어졌다. KeyDown을 사용하려고하면 항상 뒤에있는 문자입니다. 모든 문자는 KeyUp 이벤트에 예상대로 사용할 수있는WPF - keydown 이벤트 메서드에서 마지막 문자가 보이지 않는 이유

<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> 

아래의 텍스트 상자 XAML에서와 같이 이미 UpdateSourceTrigger 추가 노력했다. KeyDown 이벤트에서 모든 문자를 사용할 수 있도록하려면 어떻게해야합니까? 키가 귀하의 재산에 적용되기 전에이

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

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

이것은 일을하는 이상한 방법입니다. 왜 출력을 업데이트하기 위해 핸들러를 부착해야합니까? 텍스트 상자의 내용이 변경되었을 때 어떤 일이 일어나길 원한다면, 핸들러를'TextBox.TextChanged'에 붙이십시오. – Jon

+0

허! 그건 내가 원했던 것과 코드가 단순화 된 것입니다. 고마워. – strider

답변

0

@ Jon 님의 의견에 따르면 TextBox.TextChanged 이벤트를 사용하도록 코드를 변경 했으므로 원하는대로 작동합니다. 이제 키를 계속 누르면 문자가 텍스트 상자에 추가 될 때 출력이 변경됩니다. 내가 가지고있는 방식대로, 나는 키를 누른 상태에서 출력을 업데이트하지 않을 것이다. 나는 그것을 좋아하지 않으므로 그것을 고치려고했다.

0

에서 KeyDown 이벤트가 발생할처럼

는 코드가 뒤에 보인다. 왜 이렇게하고 싶은지 잘 모르겠지만 키 입력이 모두 필요한 경우 키를 누르는 KeyEventArgs를 확인해야합니다. KeyEventArgs의 내용을 기반으로 속성을 수정하면 e.Handled = true로 설정하여 두 번 발생하지 않도록해야합니다 (그렇지 않은 경우 나중에 처리하므로).