【问题标题】:Remove focus on first textbox删除第一个文本框的焦点
【发布时间】:2016-02-26 18:55:55
【问题描述】:

在我们的 Windows 应用商店应用程序中,我们有一个文本框,当应用程序启动时,该文本框总是获得焦点。在桌面场景下没问题,但在平板设备上这个焦点会直接打开屏幕键盘,这不是我们想要的场景。

我们尝试使用 .Focus(FocusState) 方法将焦点设置在另一个编程控件上,但不知何故,焦点又回到了文本框。我们都在 LoadState 或 OnNavigatedTo 方法中设置了焦点。

只有当我们有计时器时,我们才能成功地将焦点设置到另一个控件。任何人都知道如何将焦点设置到另一个控件,或者最好根本不将焦点设置到控件?

【问题讨论】:

    标签: windows-8 textbox windows-store-apps


    【解决方案1】:

    通常您可以通过TextBox.Focus() 将焦点设置在任何元素上。但是,当您将 TextBox 放在 ScrollViewer 或 FlyOut 中时,我发现了相同的行为(启动时自动对焦)。然后你必须在父元素上设置IsTabStop:

    <ScrollViewer IsTabStop="true">
       <TextBox />
    </ScrollViewer>
    

    【讨论】:

    • 这不是确切的答案,因为我的文本框不在滚动查看器或弹出窗口中。虽然我通过在文本框之前添加一个带有 IsTabStop=true 的滚动视图来修复它,并将水平和垂直滚动条的可见性设置为折叠。这绝对不是最美妙的解决方案,但直到我发现它的原因,它才有效!谢谢!
    • IsTabStop 是一个控件属性。所以你可以在任何控件上设置它。也许你只是尝试在你当前的父元素上设置它(不管它是什么)。
    • 它是 LayoutAwarePage 中的一个网格。 Grid 没有 IsTabStop。 LayoutAwarePage 有,但这并不能解决问题。
    【解决方案2】:

    IsTabStop="true" 对我不起作用。我的解决方案是在将焦点设置在 TextBox 之前调用 scrollViewer 的 UpdateLayout():

    scrollViewer.UpdateLayout();

    textBox.Focus(Windows.UI.Xaml.FocusState.Programmatic);

    【讨论】:

      【解决方案3】:

      如果您不喜欢ScrollViewer 接受的答案,您也可以这样做来消除焦点:

      _textBox.IsReadOnly = true;
      _textBox.IsReadOnly = false;
      

      【讨论】:

        猜你喜欢
        • 2018-07-18
        • 1970-01-01
        • 1970-01-01
        • 2013-05-15
        • 1970-01-01
        • 2013-02-28
        • 1970-01-01
        • 1970-01-01
        • 2010-11-15
        相关资源
        最近更新 更多