【问题标题】:How to force keyboard not overlap the stack panel如何强制键盘不与堆栈面板重叠
【发布时间】:2013-04-14 00:22:55
【问题描述】:

我是 WP 开发的新手,正在尝试动手操作。

如果您查看钱包密码屏幕,焦点会自动设置为文本框,以便用户可以开始输入,并且键盘不会隐藏/重叠 donecancel 按钮.

此外,如果您按下返回键,这些按钮将保留在底部,如下所示。

我也在尝试拥有相同类型的用户界面。但是,就我而言

  1. 我无法在页面加载后立即将焦点设置到文本框。我 在 OnNavigatedTo 事件中无法获取文本框的 .Focus() 方法。在哪里 我应该这样做吗?

  2. 当我手动点击文本框输入值时,键盘重叠 我的堆栈面板包含“保存”和“取消”按钮,如下所示。我 不希望这种情况发生。相反,屏幕应该看起来像 显示在第二张图片中。

下面是我试过的 XAML 代码。

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <StackPanel>
        <TextBlock Name="txtLimit" TextWrapping="Wrap" Text="Enter the value" Style="{StaticResource PhoneTextSubtleStyle}"/> 
        <TextBox AcceptsReturn="True" InputScope="Number"  />
    </StackPanel>

    <StackPanel VerticalAlignment="Bottom" HorizontalAlignment="Center" Orientation="Horizontal" >
        <Button Content="save" Width="200" />
        <Button Content="cancel" Width="200"/>
    </StackPanel>
</Grid>

【问题讨论】:

    标签: windows-phone-8


    【解决方案1】:

    要为首次导航设置焦点,您显然必须在 Loaded 事件处理程序中进行设置。

    对于后退导航(从您的应用程序关闭时开始),OnNavigatedTo 中的导航将按您的预期触发。

        // Constructor
        public MainPage()
        {
            InitializeComponent();
            this.Loaded += (sender, args) => this.textBox.Focus();
        }
    
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);
            this.textBox.Focus();
        }
    

    但是,您需要将按钮添加到 ApplicationBar 以显示在屏幕键盘下方。

    但是 SDK 不允许在应用程序栏中使用矩形按钮,只能使用图标按钮。

    【讨论】:

    • 所以这种行为是特定于操作系统并暴露给开发人员的?如果我不使用菜单项,我怀疑我们是否可以自定义 appbar 甚至隐藏这 3 个点。没有其他方法可以实现这一目标吗?一旦用户导航到页面,如何将焦点设置到文本框?
    • 针对文本框焦点更新了答案。除了编写自己的屏幕键盘(这不是一件小事)之外,我不知道有任何其他方式可以做你想做的事。
    • this.textBox.Focus();在 WP8 中不起作用。在 TextBox_Loaded 事件中做到了。 (发送者为 TextBox).Focus();
    • 上面的代码在一个全新的 WP8 项目上为我工作 - 但请注意 两个 地方 Focus() 被调用。
    【解决方案2】:

    在 OnNavigatedTo 方法中,你能不能尝试像这样使用 Dispatcher:

    Dispatcher.BeginInvoke(()=>{
        this.textBox.Focus();
      });
    

    而且,正如所指出的,您不能在 appBar 中使用矩形按钮,但您可以使用标准按钮(例如链接的 in 按钮)。

    【讨论】:

    • 我首先在一个非常简单的 WP8 项目中尝试了这个,同时在上面给出了我的答案。它没有工作......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 2019-05-22
    相关资源
    最近更新 更多