Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk menetapkan fokus pada kotak teks WPF dari ViewModelnya?

Bagaimana untuk menetapkan fokus pada kotak teks WPF dari ViewModelnya?

Mary-Kate Olsen
Lepaskan: 2025-01-26 02:02:09
asal
490 orang telah melayarinya

How to Set Focus on a WPF TextBox from its ViewModel?

Tetapkan fokus TextBox daripada ViewModel dalam WPF

Dalam pembangunan aplikasi WPF, kadangkala perlu menetapkan fokus kawalan khusus daripada ViewModel. Ini boleh dicapai dengan menggunakan gabungan sifat melekat dan teknik mengikat.

Elakkan merujuk terus elemen UI dalam ViewModel

Dalam kod sampel, cs.txtCompanyID mengakses terus elemen UI dalam paparan. Biasanya tidak disyorkan untuk merujuk terus elemen UI dalam lapisan ViewModel, kerana ini akan menyebabkan kod digabungkan dengan UI dan mengurangkan kebolehujian.

Gunakan atribut yang dilampirkan untuk pengurusan fokus

Pendekatan yang lebih baik ialah menggunakan sifat yang dilampirkan, yang boleh diikat pada sifat ViewModel. Dalam kes ini, kita boleh mencipta sifat yang dilampirkan dipanggil IsFocused yang menerima nilai boolean yang menunjukkan sama ada kawalan yang berkaitan harus mempunyai fokus.

Berikut ialah contoh pelaksanaan IsFocused harta yang dilampirkan:

<code class="language-csharp">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值
        }
    }
}</code>
Salin selepas log masuk

Ikat sifat tambahan pada ViewModel

Sebaik sahaja anda mempunyai sifat yang dilampirkan, anda boleh mengikatnya pada sifat ViewModel yang menunjukkan sama ada kawalan harus mempunyai fokus. Dalam paparan anda (XAML) anda boleh mengikat harta IsFocused kepada sifat ViewModel yang sepadan:

<code class="language-xml"><TextBox local:FocusExtension.IsFocused="{Binding IsUserNameFocused}"></TextBox></code>
Salin selepas log masuk

Nyahpepijat menggunakan kod sumber .NET

Jika anda menghadapi masalah menetapkan fokus, pertimbangkan untuk menyahpepijat kod sumber .NET untuk mendapatkan cerapan tentang tingkah lakunya. Di sini anda boleh melihat cara rangka kerja asas mengendalikan fokus dan mungkin mengenal pasti sebarang perbezaan dalam pelaksanaan tersuai anda.

Atas ialah kandungan terperinci Bagaimana untuk menetapkan fokus pada kotak teks WPF dari ViewModelnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan