【WP8】键盘弹出时控制Frame位置
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位置的更多相关文章
- H5页面 绝对定位元素被 软键盘弹出时顶起
H5页面 绝对定位元素被 软键盘弹出时顶起 在h5页面开发的过程中,我们可能会遇到下面这个问题,当页面中有输入框的时候,系统自带的软盘会把按钮挤出原来的位置.那么我们该怎么解决呢?下面列出一下的方法: ...
- Android 软键盘弹出时把原来布局顶上去的解决方法
键盘弹出时,会将布局底部的导航条顶上去. 解决办法: 在mainfest.xml中,在和导航栏相关的activity中加: <activity android:name=& ...
- Android软键盘弹出时布局问题
最近项目需要做一个类似聊天室的模块,基于Socket实现的,这部分稍后一段时间再做总结,功能上的相关点都实现了小例子也做出来了,最后发现一个比较腻歪的问题就是软键盘弹出时总是会把标题“挤出”屏幕,(无 ...
- 小程序中点击input控件键盘弹出时placeholder文字上移
最近做的一个小程序项目中,出现了点击input控件键盘弹出时placeholder文字上移,刚开始以为是软键盘弹出布局上移问题是传说中典型的fixed 软键盘顶起问题,因此采纳了网上搜到的" ...
- 解决android的键盘弹出时,html页面的高度被压缩
如果元素的高度是用100%表示,那么,安卓的键盘弹出时,高度会发生变化,导致布局混乱,所以最好给高度设置像素高度 $("html,body").height(window.inne ...
- Android中软键盘弹出时关于布局的问题
当在Android的layout设计里面如果输入框过多,则在输入弹出软键盘的时候,下面的输入框会有一部分被软件盘挡住,从而不能获取焦点输入. 解决办法: 方法一:在你的activity中的oncre ...
- 如何让你的 React Native 应用在键盘弹出时优雅地响应
原文地址:How to make your React Native app respond gracefully when the keyboard pops up 原文作者:Spencer Car ...
- UITextField控件处理键盘弹出时遮住输入框的问题
原文连接: http://www.devdiv.com/thread-70159-1-1.html 实现以下三个方法,如果弹出的键盘会遮住输入框 ,整体的界面会向上移动,这样就不会遮住输入框了.自己增 ...
- Android软键盘弹出时把布局顶上去的解决方法
原文: 解决Andriod软键盘出现把原来的布局给顶上去的方法(转) 链接:http://blog.sina.com.cn/s/blog_9564cb6e0101g2eb.html 决方法,在main ...
随机推荐
- python dict conver json
demo: import jsonimport requestsimport xml.etree.ElementTree as et def xmlsjondemo(): data={'statusc ...
- ILOG JRules 和 WebSphere Process Server 集成概述
ILOG JRules 和 WebSphere Process Server 集成概述 简介 业务流程管理(Business Process Management,BPM)和业务规则管理系统(Busi ...
- 随手记Swift基础和Optional Type(问号?和感叹号!)
距离Apple推出Swift已经有几天了,网上也时不时出现"急招Swift程序猿,要求有一天工作经验"的帖子. 看到Swift,除了苹果放的另外一门语言的链接(http://swi ...
- 用B表更新A表
UPDATE dbo.POR_LOT SET POR_LOT.SHIPPED_FLAG =B.SHIPPED_FLAGFROM POR_LOT A INNER JOIN ( SELECT T5.LOT ...
- WPF通过EventTrigger改变其他控件的值
场景:点击TextBox后弹出Poppup 原理:使用EventTrigger后触发StoryBoard,通过StoryBoard改变其他控件的值. 参考代码: <Grid> <Gr ...
- Android——软键盘操作+fragment之间传递参数+TextView限制字数,显示"..."
原文地址: Android 手动显示和隐藏软键盘 Android隐藏输入法键盘(hideSoftInputFromInputMethod没有效果) Android Fragment传递参数_Fragm ...
- pppoe应用概述
PPPOE简述 PPP主要是用来通过拨号或专线方式在两个网络节点之间建立连接.发送数据.PPP是一种分层协议,物理层用来进行实际的点到点连接.由链路控制层(LCP)发起对链路的建立.配置和测试.在LC ...
- opencv 中affine函数实现旋转和平移
图像旋转和平移是图像处理中常用的一种操作,opencv2和opencv3中对图像的旋转和平移都是通过仿射变换函数cv::warpAffine()来实现的. 1.图像的旋转 图像的旋转具体实现分为两步: ...
- linux下查看cpu物理个数和逻辑个数
hadoop@chw-desktop3:~$ cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 15 ...
- 1.nginx 防注入
http://blog.kukafei520.net/html/2013/773.html