2017-12-25 67 views
0

このコードをキーボードのアクティブな検出に変更するにはどうすればよいですか?今、私はpress enterの後に何を書いているのかを示しています。どのように私はキーを入力せずに書くことができるかを示すことができます。キーボードを検出するにはどうすればいいですか?C#WPF

XAML:

<StackPanel> 
    <TextBlock Width="300" Height="20"> 
    Type some text into the TextBox and press the Enter key. 
    </TextBlock> 
    <TextBox Width="300" Height="30" Name="textBox1" 
      KeyDown="OnKeyDownHandler"/> 
    <TextBlock Width="300" Height="100" Name="textBlock1"/> 
</StackPanel> 

のC#:

private void OnKeyDownHandler(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Return) 
    { 
     textBlock1.Text = "You Entered: " + textBox1.Text; 
    } 
} 

それとも、それを作成するためにいくつかの切り抜いた方法ですか?

+0

のMh ...あなたが何しようとしています!これは、以前入力したものを保存しないためです... –

答えて

1

あなたは、単にテキストを直接バインドすることができます:あなたは任意のコードビハインド必要はありません

<StackPanel> 
    <TextBlock Width="300" Height="20"> 
    Type some text into the TextBox and it will appear in the field automatically. 
    </TextBlock> 
    <TextBox Width="300" Height="30" Name="textBox1" /> 
    <TextBlock Width="300" Height="100" Name="textBlock1" Text="{Binding Text, ElementName=textbox1}"/> 
</StackPanel> 

この方法です。

EDIT

あなたはより洗練されたものをしたい場合は、これを試してみてください。このようなプロジェクトでは、新しいクラスの実装:

public class MyConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return $"You entered: {value ?? "nothing"}"; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotSupportedException(); 
    } 
} 

をして、あなたが

<Window.Resources> 
    <local:MyConverter x:Key="MyConverter"/> 
</Window.Resources> 
<StackPanel> 
    <TextBox Name="txtEdit" /> 
    <TextBlock Text="{Binding Text, Converter={StaticResource MyConverter}, ElementName=txtEdit}" /> 
</StackPanel> 

への結合変更ウィンドウのためのリソースを忘れないでください。ここで

はアクションでそれを示す画面映像である:

Screen-Video

+0

フォーカスが**失われてからテキストボックスになるまで、結果は表示されません。 – MickyD

+0

UpdateSourceTrigger PropertyChangedを使用すると、その結果が表示されます。私は家に帰るときにサンプルを書き直します。 – sprinter252

+0

これは私があなたにしていることです。) – MickyD

1
textBlock1.Text = "You Entered: " + **textBox1.Text**; 

は直接制御プロパティを使用しないでください、対照的にMVVMとバインディングを使用しています。

"バインディングのUpdateSourceTriggerプロパティは、変更された値がソースに返される方法と時期を制御します。

http://www.wpf-tutorial.com/data-binding/the-update-source-trigger-property/

+0

私はあなたが正しい道にいると思います。この特定のバインディングの更新を使用するとすぐに入力が行われ、タブ移動は必要ないことをさらに説明したい場合があります – MickyD

1

私が正しく質問を理解している場合は、トンネリングPreviewKeyDownイベント必要があります。また

private void OnPreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.G) 
    { 
     e.Handled = true; 
    } 
} 

を、あなたはKeyboardクラスを使用することができます。実際には、Keyboardクラスは、あなたのコード内の任意の場所にを使用することができます。

private void SomeMethod() 
{ 
    if (Keyboard.IsKeyDown(Key.LeftCtrl)) 
    { 
     MessageBox.Show("Release left Ctrl button"); 
     return; 
    } 
    //Do other work 
} 
関連する問題