【问题标题】:wp7 popup blocking textbox in popupwp7弹出窗口阻止弹出窗口中的文本框
【发布时间】:2012-02-19 01:27:50
【问题描述】:

我在 MainPage 上打开了一个带有几个文本框的弹出窗口。当您专注于下部文本框时,键盘会将其从视图中遮住。通常文本框会滑入视图。我不知道为什么这里没有发生这种情况。

请帮忙!

<UserControl x:Class="Controls.EditControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:SampleData="clr-namespace:SampleData" 
mc:Ignorable="d"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
Height="800" Width="480"
d:DataContext="{d:DesignData ../SampleData/sampleEditPopup.xaml}">

<Grid x:Name="LayoutRoot" Background="#FF000000" Opacity="0.995">
    <StackPanel Margin="0,20,0,0" Orientation="Horizontal" VerticalAlignment="Top">
        <TextBlock TextWrapping="Wrap" Text="Name" HorizontalAlignment="Left" Height="26" Margin="15,10,0,10" Width="110" TextAlignment="Right"/>
        <TextBox x:Name="tb_name" 
            TextWrapping="Wrap" 
            Width="340" Height="75"
            Margin="10,13,15,12"
            InputScope="Text" MaxLength="1000" 
            Text="{Binding Title, Mode=TwoWay}"/>
    </StackPanel>
    <StackPanel Orientation="Horizontal" Margin="0,150,0,0" VerticalAlignment="Top">
        <TextBlock TextWrapping="Wrap" Text="Description" HorizontalAlignment="Left" Height="26" Margin="15,40,0,10" Width="110" VerticalAlignment="Top" TextAlignment="Right"/>
        <TextBox x:Name="tb_description" 
            TextWrapping="Wrap" 
            Width="340" Height="254" 
            Margin="10,13,15,12"
            InputScope="Text" MaxLength="1000" 
            Text="{Binding Description, Mode=TwoWay}"/>
    </StackPanel>
</Grid>

这是打开它的代码:

EditControl ec = new EditControl();
ec.Title = cm.Title;
ec.Description = cm.Description;

//sets appbar icons for accepting values
setEditIcons();

Popup edit = new Popup() { Child = ec, Tag = this };
edit.Closed += new EventHandler(edit_Closed);
edit.IsOpen = true;

【问题讨论】:

    标签: silverlight windows-phone-7


    【解决方案1】:

    从用户体验的角度来看,我强烈建议不要使用任何具有超过 1 或 2 个按钮的部分弹出/覆盖。它只是没有在 WP7 中完成。如果您有希望人们填写的表格,请将其移至其自己的页面。通过让用户导航到该页面,或者在当前页面之前引入一个新的临时页面(无法导航回)。

    除了带有表单覆盖的屏幕键盘之外,您还会遇到更多问题。您需要将 AppBar 更改为具有用于任何数据输入的“V”和“X”按钮,您需要管理焦点不会滑回覆盖/弹出窗口下,您需要确保“返回" 按钮关闭弹出窗口等。

    IMO 最好的方法是简单且一致的用户体验。

    【讨论】:

    • 我明白你的意思。但是导航到另一个页面以更改对象名称和描述似乎有点过头了。我实际上已经处理了所有其他条件。如果我导航到另一个页面,那么我必须担心将所需的对象和值传递到该页面,而且当我回来时,我必须确保显示正确的信息。也许这是我唯一的选择,但似乎有点荒谬。
    • 这正是 People Hub 为重命名联系人所做的,这就是 office 所做的,也是其他一切所做的。如果您是开发人员,请避免在 Metro 中“创新”而不考虑适当的用户体验。除非您的观点基于 Metro 设计语言原则,否则请努力与其他应用程序和操作系统保持一致。用户会因为未能设计 Metroesque 应用而对您的应用投反对票。只是我的 0.02 美元。
    • 我已经通过了地铁指南,而且我所做的与人员中心和其他应用程序所做的不同。我不是在“创新”我使用内置控件的任何东西。不相信我吗?这是指南中的剪辑“对于瞬态 UI,例如登录屏幕,您可以使用 Silverlight Popup 控件...”msdn.microsoft.com/en-us/library/hh202911%28v=vs.92%29.aspx ...无论如何,我能够通过在 xaml 中创建来使键盘正常工作而不是后面的代码。