WP上,当使用TextBox输入文字的时候,键盘会把TextBox向上推一段距离

当编辑第二个TextBox的时候,页面被上推,键盘刚好和TextBox靠在一起

当编辑第一个TextBox的时候,页面被上推,键盘与TextBox有一段很小的距离

现在需要实现一个文本输入的窗口,当用户编辑文本的时候,TextBox可以紧靠在TextBox

实现:通过绑定监听ApplicationFrame的RenderTransform中的TranslateTransform中的Y属性的变化,从而自行控制Frame的位置

  当TextBox获得焦点的时候,键盘弹出,Frame被向上推,这时候监听到相关属性的变化,通过赋值覆盖变化

using System.Windows;
using System.Windows.Data;
using System.Windows.Media;
using System.Windows.Navigation;
using Microsoft.Phone.Controls; namespace PushFrameDemo
{
public partial class MainPage
{
#region 控制弹出键盘时,Frame的位置 public static readonly DependencyProperty TranslateYProperty = DependencyProperty.Register("TranslateY",
typeof(double), typeof(MainPage), new PropertyMetadata(0.0, OnRenderYPropertyChanged)); private static void OnRenderYPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
((MainPage)d).UpdateTranslateY();
} public void UpdateTranslateY()
{
var frame = Application.Current.RootVisual as PhoneApplicationFrame;
if (frame != null)
{
var tranformGroup = frame.RenderTransform as TransformGroup;
if (tranformGroup != null)
{
var translateTransform = (TranslateTransform)tranformGroup.Children[]; //TODO:当键盘隐藏时,把Frame恢复原处
translateTransform.Y = ; //TODO:当键盘弹出时,把Frame推到键盘的上面
//translateTransform.Y = 408;
}
}
} /// <summary>
/// 绑定Frames的属性(在页面进入的时候绑定,在页面离开的时候取消绑定)
/// </summary>
private void BindToFramesTranslateY()
{
var phoneApplicationFrame = Application.Current.RootVisual as PhoneApplicationFrame;
if (phoneApplicationFrame != null)
{
var transformGroup = phoneApplicationFrame.RenderTransform as TransformGroup;
if (transformGroup != null)
{
var source = transformGroup.Children[] as TranslateTransform;
SetBinding(TranslateYProperty, new Binding("Y") { Source = source });
}
}
} protected override void OnNavigatedTo(NavigationEventArgs e)
{
//绑定依赖属性,监听Frame相关属性的变化
BindToFramesTranslateY();
} protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
//取消绑定
ClearValue(TranslateYProperty);
} #endregion // 构造函数
public MainPage()
{
InitializeComponent();
}
}
}

谢谢@阿布的分享

【WP8】键盘弹出时控制Frame位置的更多相关文章

  1. H5页面 绝对定位元素被 软键盘弹出时顶起

    H5页面 绝对定位元素被 软键盘弹出时顶起 在h5页面开发的过程中,我们可能会遇到下面这个问题,当页面中有输入框的时候,系统自带的软盘会把按钮挤出原来的位置.那么我们该怎么解决呢?下面列出一下的方法: ...

  2. Android 软键盘弹出时把原来布局顶上去的解决方法

    键盘弹出时,会将布局底部的导航条顶上去. 解决办法: 在mainfest.xml中,在和导航栏相关的activity中加: <activity            android:name=& ...

  3. Android软键盘弹出时布局问题

    最近项目需要做一个类似聊天室的模块,基于Socket实现的,这部分稍后一段时间再做总结,功能上的相关点都实现了小例子也做出来了,最后发现一个比较腻歪的问题就是软键盘弹出时总是会把标题“挤出”屏幕,(无 ...

  4. 小程序中点击input控件键盘弹出时placeholder文字上移

    最近做的一个小程序项目中,出现了点击input控件键盘弹出时placeholder文字上移,刚开始以为是软键盘弹出布局上移问题是传说中典型的fixed 软键盘顶起问题,因此采纳了网上搜到的" ...

  5. 解决android的键盘弹出时,html页面的高度被压缩

    如果元素的高度是用100%表示,那么,安卓的键盘弹出时,高度会发生变化,导致布局混乱,所以最好给高度设置像素高度 $("html,body").height(window.inne ...

  6. Android中软键盘弹出时关于布局的问题

     当在Android的layout设计里面如果输入框过多,则在输入弹出软键盘的时候,下面的输入框会有一部分被软件盘挡住,从而不能获取焦点输入. 解决办法: 方法一:在你的activity中的oncre ...

  7. 如何让你的 React Native 应用在键盘弹出时优雅地响应

    原文地址:How to make your React Native app respond gracefully when the keyboard pops up 原文作者:Spencer Car ...

  8. UITextField控件处理键盘弹出时遮住输入框的问题

    原文连接: http://www.devdiv.com/thread-70159-1-1.html 实现以下三个方法,如果弹出的键盘会遮住输入框 ,整体的界面会向上移动,这样就不会遮住输入框了.自己增 ...

  9. Android软键盘弹出时把布局顶上去的解决方法

    原文: 解决Andriod软键盘出现把原来的布局给顶上去的方法(转) 链接:http://blog.sina.com.cn/s/blog_9564cb6e0101g2eb.html 决方法,在main ...

随机推荐

  1. c++ 调用matlab程序

    以64 bit win7下的matlab 2012a(64bit)和vs2010为例:[1]   在vs2010中新建一个C++控制台工程,添加依赖项:(请根据自己的matlab安装目录更改)[2] ...

  2. C语言字符串格式化显示

    符号                  作用 ──────────────────────────     %d              十进制有符号整数     %i              输 ...

  3. 基于jQuery和CSS3超酷Material Design风格滑动菜单导航特效

    分享一款效果非常炫酷的谷歌 Material Design 风格jQuery和CSS3滑动选项卡特效.该选项卡特效集合了扁平风格设计和按钮点击波特效.是一款设计的非常不错的Material Desig ...

  4. [strace]跟踪进程的系统调用

    转自:https://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316692.html 简介 strace常用来跟踪进程执行时的系统调用和所接收的信号 ...

  5. [转].Net连接池超时注意事项

    http://blog.csdn.net/jxqvip/article/details/6738551 超时时间已到.超时时间已到,但是尚未从池中获取连接.出现这种情况可能是因为所有池连接均在使用,并 ...

  6. python多进程并发

    由于Python下调用Linux的Shell命令都需要等待返回,所以常常我们设置的多线程都达不到效果,因此在调用shell命令不需要返回时,使用threading模块并不是最好的方法.   http: ...

  7. 解决IDEA 中git 无法自动push 提交问题 Push failed: Failed with error: Could not read from remote repository.

    Push failed: Failed with error: Could not read from remote repository.

  8. 解决:According to TLD or attribute directive in tag file, attribute value does not accept any express。

    http://blog.csdn.net/lzblog/article/details/22076893 ——————————————————————————————————————————————— ...

  9. windows 下安装 redis

    Redis 是一个高性能的key-value数据库, 使用内存作为主存储,数据访问速度非常快,当然它也提供了两种机制支持数据持久化存储.比较遗憾的是,Redis项目不直接支持Windows,Windo ...

  10. jQuery imgAreaSelect Examples

    案例:前端图片截取功能 分布说明A:选择File本地选择的图片 B:根据需求按比例缩放图片 C:区域选择型操作 A: 选择图片 <input class="upfile" t ...