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

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

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

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

wpfでは、viewmodel

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

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

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);
}
ログイン後にコピー
<附>追加の属性を使用

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 サイトの他の関連記事を参照してください。

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