【问题标题】:Programatically set Focus to a TextBox in Windows Phone以编程方式将焦点设置为 Windows Phone 中的文本框
【发布时间】:2013-04-12 09:04:53
【问题描述】:

在 Windows Phone 应用程序中,我有一个 TextBox 和一个 Button。用户向 TextBox 写入一些文本并点击 Button,TextBox 中的文本被添加到列表中。点击 Button 后,TextBox 失去焦点。

我想要做的是在点击按钮后将焦点设置回文本框,以便用户可以继续编写另一个文本而无需点击文本框。

我尝试在 Button 处理程序中调用 TextBox 的 Focus() 方法,但这不起作用。如果有的话,还有其他方法吗?

【问题讨论】:

    标签: c# windows-phone-7 xaml windows-phone-8


    【解决方案1】:

    点击按钮时尝试添加bollean flag = true。然后在事件OnTextBoxLostFocus 上检查此标志。

    <TextBox x:Name="tb" Grid.Row="1" LostFocus="Tb_OnLostFocus"/>
    <Button x:Name="btn" Click="Btn_OnClick" />
    
     public partial class MainPage : PhoneApplicationPage
    {
        private bool flag;
        public MainPage()
        {
            InitializeComponent();
        }
    
        private void Btn_OnClick(object sender, RoutedEventArgs e)
        {
            flag = true;
            tb.Focus();
        }
    
        private void Tb_OnLostFocus(object sender, RoutedEventArgs e)
        {
            if (!flag) return;
            tb.Focus();
            flag = false;
        }
    }
    

    希望有帮助。

    【讨论】:

    • 当我设置了几个断点但没有它们时它可以工作。我认为可能存在某种延迟(在标志设置为 true 之前触发 OnTextBoxLostFocus)。
    • 由于某种原因 OnLostFocus 被调用了两次。我将标志更改为 int 并在单击事件中将其设置为 2,然后在 OnLostFocus 中检查它是否大于零并将 id 减 1。奇怪,但现在可以使用。
    【解决方案2】:

    我尝试了很多解决方案,但这是唯一适合我的解决方案(Windows Phone 8.1 应用程序)。 首先捕获您的 TextBox 的 Loaded 事件,然后调用 Focus(FocusState.Keyboard)

    private void myTextBox_Loaded(object sender, RoutedEventArgs e)
    {
        myTextBox.Focus(FocusState.Keyboard);
    }
    

    【讨论】:

      【解决方案3】:

      即使我尝试了很多上述解决方案,但没有一个对我有用,因为我试图专注于页面加载。最后,我得到了这个解决方案,它奏效了。

      private void txtBox_LayoutUpdated(object sender, EventArgs e)
              {
                  txtBox.Focus();
              }
      

      【讨论】:

      • 这种方法的问题是它只有在只有一个文本框时才有效。如果有更多(例如用户名和密码),您不能从一个切换到另一个,因为焦点停留在第一个 TextBox 中。
      • @kibitzerCZ 不错,可能有人会解决这个问题。
      【解决方案4】:

      如果你打电话会发生什么:

      yourTextBox.Select(0,0)
      

      http://msdn.microsoft.com/en-us/library/system.windows.controls.textbox.select.aspx

      【讨论】:

      • 你能展示你的代码吗?我尝试了一个 wp7 项目,并尝试在我的按钮的单击事件中使用来调用 myTextBox.Focus() 并且它可以工作。
      【解决方案5】:

      您可以通过以编程方式赋予它焦点来完成此操作。这可以通过 调用其 Focusmethod,尽管此调用在某些条件下可能会失败(并返回 false)。 例如,您不能将焦点设置在页面构造函数中的控件上;太早了。你可以, 但是,从页面的 Loadedevent 调用它。

      【讨论】:

        【解决方案6】:

        在手机上最适合我的方式是,如果我想在页面加载时专注于特定的文本框:

        private void OnPageLoaded(object sender, RoutedEventArgs e)
        {
            Dispatcher dispatcher = Deployment.Current.Dispatcher;
            dispatcher.BeginInvoke(() => EnterLocationTextBox.Focus());
        }
        

        或者如果我只是在某个时候想要它。只需重复这两行:

        Dispatcher dispatcher = Deployment.Current.Dispatcher;
        dispatcher.BeginInvoke(() => EnterLocationTextBox.Focus());
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-10-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多