簡體   English   中英

以編程方式聚焦在先前語句中重新啟用的 UI 元素

[英]Programatically focus a UI element that was re-enabled in the prior statement

我正在開發一個表格,其中一個要求是在前兩個完成之前禁用大部分字段。 為了可用性起見,我希望它設置為在您從第二個字段 (Field_Two.LostFocus) 中選擇出來后,啟用、顯示字段的 rest,並聚焦第一個字段。 我目前擁有的代碼在啟動時將所有字段的可見性設置為 visibility.hidden。 它目前所做的是關注 Field_One (在啟用字段的選項卡順序中的下一個),但我已經確認條件已正確滿足並且執行繼續通過 return 語句。

Field.beenFocused 是我創建的一個變量,它被初始化為 false,然后在字段第一次聚焦時設置為 true,我的字段 class 擴展了 TextBox; 我所有的控件保存 Field_One 和 Field_Two 都在 Stackpanels 中。

C#

        void Field_Two_LostFocus(object sender, RoutedEventArgs e)
    {
        if (!Field_Three.beenFocused)
        {

            if (String.IsNullOrWhiteSpace(Field_One.Text) || String.IsNullOrWhiteSpace(Field_Two.Text))
                return;

            foreach (object u in ApplicationGrid.Children)
                if (u.GetType() == typeof(StackPanel))
                        ((StackPanel)u).IsEnabled = true;

            do { Field_Three.Focus(); }
            while (!Field_Three.beenFocused);
        }
    }

您可以嘗試在TextChanged事件中啟用/禁用,而不是在LostFocus事件中。

這是一些示例代碼。

主窗口.xaml:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <StackPanel>
        <TextBox Name="textBox1" TextChanged="ValidateInitialFieldsOnChange"
                 Height="23" Width="120" />
        <TextBox Name="textBox2" TextChanged="ValidateInitialFieldsOnChange"
                 Height="23" Width="120" />
        <TextBox Name="textBox3" IsEnabled="False" Height="23" Width="120" />
    </StackPanel>
</Window>

MainWindow.xaml.cs:

using System.Windows;
using System.Windows.Controls;

namespace WpfApplication1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void ValidateInitialFieldsOnChange(object sender,
            TextChangedEventArgs e)
        {
            textBox3.IsEnabled = !string.IsNullOrWhiteSpace(textBox1.Text)
                && !string.IsNullOrWhiteSpace(textBox2.Text)
                ;
        }
    }
}

調整此代碼以適應您的場景將是相當簡單的,並且不需要手動設置焦點。 您可能可以改用標簽順序。

但是,如果跳位順序沒有幫助,您仍然可以使用這些方法的組合來解決問題。 LostFocus事件中設置焦點,並在TextChanged事件中啟用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM