Xaml 出现SIP键盘时Windows Phone项目滚动问题
当我在制作一个简单的聊天应用程序时,下面的代码有两个问题。 代码在页面顶部显示一个文本块,在底部显示两个文本框堆栈。加上一个列表框,该列表框将自动调整高度以填充剩余的间隙Xaml 出现SIP键盘时Windows Phone项目滚动问题,xaml,windows-phone,Xaml,Windows Phone,当我在制作一个简单的聊天应用程序时,下面的代码有两个问题。 代码在页面顶部显示一个文本块,在底部显示两个文本框堆栈。加上一个列表框,该列表框将自动调整高度以填充剩余的间隙 <Grid x:Name="LayoutRoot" Background="Transparent"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDe
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Rectangle Height="1" Fill="White" VerticalAlignment="Top"/>
<TextBlock Text="Hello World!" Grid.Row="0" FontSize="36"/>
<Listbox Grid.Row="1"/>
<TextBox Grid.Row="2"/>
<TextBox Grid.Row="3"/>
</Grid>
当键盘弹出并取消弹出时,
TranslateTransform
会在PhoneApplicationFrame
上运行,上下转换整个屏幕
基于,你应该能够得到翻译的价值。正如您所看到的,动画将Y
属性从零移动到特定的负值(基于您所关注的控件)
选项1:我无法编写处理此值的下降方式,但您应该能够调整控件的大小以适应屏幕的剩余部分
选项2.0(错误):可以取消或删除此动画。键盘将位于屏幕顶部,不会移动。现在轮到您移动/调整控件大小以适应剩余空间
public MainPage()
{
this.InitializeComponent();
PhoneApplicationFrame frame = (App.Current as App).RootFrame;
var group = (frame.RenderTransform as TransformGroup);
group.Children.RemoveAt(0); // remove translate transform
}
选项2.1:2.0存在一个问题:删除转换将阻止您收到有关键盘的通知。当Y属性更改时,在页面的子级上设置反向动画将“某种程度上取消”原始翻译
<Grid x:Name="LayoutRoot" Background="Transparent" VerticalAlignment="Stretch">
<Grid.RenderTransform>
<TransformGroup>
<TranslateTransform />
</TransformGroup>
</Grid.RenderTransform>
static void OnRootFrameTransformChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
{
// ... edit from the blog article ...
MainPage page = source as MainPage;
page.lb.Items.Add(newvalue);
var oppositeTransform = (TranslateTransform)((TransformGroup)page.RenderTransform).Children[0];
if (newvalue < 0.0)
{
page.IsSipVisibleGuess.IsChecked = true;
oppositeTransform.Y = -newvalue;
}
else if (newvalue == 0.0)
{
page.IsSipVisibleGuess.IsChecked = false;
oppositeTransform.Y = 0;
}
RootFrameTransformChanged上的静态无效(DependencyObject源、DependencyPropertyChangedEventArgs e)
{
//…从博客文章中编辑。。。
主页面=源作为主页面;
第页lb.Items.Add(新值);
var oppositeTransform=(TranslateTransform)((TransformGroup)page.RenderTransform).Children[0];
如果(新值<0.0)
{
page.IsSipVisibleGuess.IsChecked=true;
Y=-newvalue;
}
else if(newvalue==0.0)
{
page.IsSipVisibleGuess.IsChecked=false;
相反变换,Y=0;
}
很抱歉,这些选项都不能神奇地解决问题,但它可以帮助您编写最适合您的应用程序的代码
如果您能从中找到更好的解决方案,请将其作为答案发布。可能的副本