以编程方式将焦点设置为Windows Phone中的TextBox

时间:2013-04-12 09:04:54

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

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

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

我尝试在Button处理程序中调用TextBox的Focus()方法,但这不起作用。是否有另一种方法(如果有的话)?

6 个答案:

答案 0 :(得分:5)

点击按钮时尝试添加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;
    }
}

希望得到它的帮助。

答案 1 :(得分:2)

即使我尝试了很多上述解决方案,但是当我试图专注于页面加载时,它们都没有为我工作。最后我得到了这个解决方案并且有效。

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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());