ホームページ > バックエンド開発 > C++ > ViewModelからWPFのテキストボックスにプログラムでフォーカスを設定するにはどうすればよいですか?

ViewModelからWPFのテキストボックスにプログラムでフォーカスを設定するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-26 01:56:12
オリジナル
492 人が閲覧しました

How Can I Programmatically Set Focus to a TextBox in WPF from the ViewModel?

wpfでは、viewmodel

を介してテキストボックスの焦点を設定します。 WPFビューのボタンでクリックしたら、エラーメッセージを表示し、特定のテキストボックスコントロールにフォーカスを転送する必要がある場合があります。ただし、ViewModelで次のコードを実行すると、必要なテキストボックスにカーソルを設定できません。

この問題の理由は、UI要素をViewModelで直接引用することです。これは一般的な慣行です。この問題を解決するには、他のテクノロジーを使用する必要があります。

<code class="language-csharp">if (companyref == null)
{
    var cs = new Lipper.Nelson.AdminClient.Main.Views.ContactPanels.CompanyAssociation(); 

    MessageBox.Show("Company does not exist.", "Error", MessageBoxButton.OK,
                    MessageBoxImage.Exclamation);

    cs.txtCompanyID.Focusable = true;

    System.Windows.Input.Keyboard.Focus(cs.txtCompanyID);
}</code>
ログイン後にコピー
追加の属性を使用

1つの方法は、任意のuieLementに適用できる追加の属性を作成し、「ISFOCUSED」などのViewModel属性に結合することです。この属性の値が変更されると、要素の焦点を設定して、ビューモデルの状態にバインドできるようにします。この追加属性の実装を以下に示すことができます:

次に、XAMLのViewModelにバインドできる属性を使用して、プログラミングを通じてフォーカスを設定できます。

.NETソースコードを使用してデバッグpublic static class FocusExtension { public static bool GetIsFocused(DependencyObject obj) { return (bool)obj.GetValue(IsFocusedProperty); } public static void SetIsFocused(DependencyObject obj, bool value) { obj.SetValue(IsFocusedProperty, value); } public static readonly DependencyProperty IsFocusedProperty = DependencyProperty.RegisterAttached( "IsFocused", typeof(bool), typeof(FocusExtension), new UIPropertyMetadata(false, OnIsFocusedPropertyChanged)); private static void OnIsFocusedPropertyChanged( DependencyObject d, DependencyPropertyChangedEventArgs e) { var uie = (UIElement)d; if ((bool)e.NewValue) { uie.Focus(); // 忽略 false 值。 } } }複雑なフォーカスの問題については、.NETソースコードを使用してデバッグして、焦点を処理するフレームワークがどのように役立つかを理解します。これは貴重な洞察を提供し、問題を見つけるのに役立ちます。

代替

ViewModelからTextBoxの焦点を設定する別の方法は、コマンドを使用して動作を実行することです。この動作は、ビューまたはViewModelに実装でき、ボタンにバインドしてクリックすることができます。次に、動作を設定して、必要なテキストボックスにフォーカスを設定できます。

以上がViewModelからWPFのテキストボックスにプログラムでフォーカスを設定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート