質問

アプリの各 TextBox PreviewKeyUp イベントを添付し、押されたキーがEnterキーであるかどうかを確認してからアクションを実行する代わりに、拡張を実装することにしました TextBox でEnterキーが押されたときに起動するDefaultActionイベントを含む TextBox のバージョン。

基本的には、 TextAction からパブリックイベント DefaultAction を拡張する新しいクラスを作成しました。

public class DefaultTextBoxControl:TextBox
{
    public event EventHandler<EventArgs> DefaultAction = delegate { };

    public DefaultTextBoxControl()
    {
        PreviewKeyUp += DefaultTextBoxControl_PreviewKeyUp;
    }

    void DefaultTextBoxControl_PreviewKeyUp(object sender, System.Windows.Input.KeyEventArgs e)
    {
        if (e.Key != Key.Enter)
        {
            return;
        }
        DefaultAction(this, EventArgs.Empty);
    }
}

次に、このような(xaml)のようにアプリからこのカスタムテキストボックスを使用します:

<Controls:DefaultTextBoxControl  DefaultAction="DefaultTextBoxControl_DefaultAction">
</Controls:DefaultTextBoxControl>

今では、WPFの学習での小さな経験で、ほとんどの場合、「クーラー」があることに気付きました。 (そして願わくばもっと簡単に)物事を実装する方法

...私の質問は、上記のコントロールを改善するにはどうすればよいですか、または上記のコントロールを実行できる別の方法がありますか? ...おそらく、宣言型(xaml)と手続き型(C#)の両方ではなく、宣言型コードのみを使用していますか?

役に立ちましたか?

解決

このブログ投稿をご覧ください数か月前、「グローバル」イベントハンドラーを TextBox.GotFocus にアタッチして、テキストを選択しました。

本質的に、次のようにAppクラスで KeyUp イベントを処理できます:

protected override void OnStartup(StartupEventArgs e)
{
    EventManager.RegisterClassHandler(typeof(TextBox),
        TextBox.KeyUpEvent,
        new System.Windows.Input.KeyEventHandler(TextBox_KeyUp));

    base.OnStartup(e);
}

private void TextBox_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
{
    if (e.Key != System.Windows.Input.Key.Enter) return;

    // your event handler here
    e.Handled = true;
    MessageBox.Show("Enter pressed");
}

...そして、アプリケーション内のすべての TextBox は、ユーザーが入力したときに TextBox_KeyUp メソッドを呼び出します。

更新

コメントで指摘したように、これはすべての TextBox が同じコードを実行する必要がある場合にのみ役立ちます。

Enterキーを押すなどの任意のイベントを追加するには、添付イベント。これであなたが望むものが得られると思います。

他のヒント

この質問が尋ねられて以来、TextBoxesおよびその他のコントロールに InputBindings プロパティがあります。これにより、カスタムコントロールを使用するのではなく、純粋にXAMLソリューションを使用できます。 Return および Enter KeyBinding を割り当ててコマンドを指すようにできます。

例:

<TextBox Text="Test">
    <TextBox.InputBindings>
        <KeyBinding Command="{Binding SomeCommand}" Key="Return" />
        <KeyBinding Command="{Binding SomeCommand}" Key="Enter" />
    </TextBox.InputBindings>
</TextBox>

Enter が常に機能するとは限らず、一部のシステムでは Return が使用される場合があると言及している人もいます。

ユーザーがTextBoxでEnterキーを押すと、テキストボックスの入力がユーザーインターフェイス(UI)の別の領域に表示されます。

次のXAMLは、StackPanel、TextBlock、およびTextBoxで構成されるユーザーインターフェイスを作成します。

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

次のコードビハインドは、KeyDownイベントハンドラーを作成します。押されたキーがEnterキーの場合、TextBlockにメッセージが表示されます。

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

詳細については、 MSDN ドキュメント

    private void txtBarcode_KeyDown(object sender, KeyEventArgs e)
    {
        string etr = e.Key.ToString();

        if (etr == "Return")
        {
            MessageBox.Show("You Press Enter");
        }
    }

特定のテキストボックスまたはオブジェクトへの xaml のイベントの追加:

KeyDown =&quot; txtBarcode_KeyDown&quot;

scroll top