【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 ...
随机推荐
- mysql性能优化(一)
随着项目的上线,关注开始关注服务器的运维和优化,其中后端数据库状态查看和参数调优是比不可少的一步,可能用到的两个小工具: mysqltuner.pl tuning-primer.sh 参考: [1] ...
- pual_bot 天气插件编写
最近在玩pual_bot,感觉很不错,最近天气插件失效了,就结合百度api重新写了一个,也提交了. https://github.com/coldnight/pual_bot #!/usr/bin/e ...
- 知道创宇研发技能表v2.1
创建时间:2012/12/1 2013/4/26 公开发布 2013/7/15 新增:牛人1,2,3 2013/7/20 优化:成长,增加:小事心态.任务拆分.方法论 2013/8/12 更新:Web ...
- redis过期回调以及键空间通知
背景 最近需要涉及一个定时通知的业务,之前的办法是采用定时任务,每秒查询一次.后来了解到Redis的键空间通知机制,其中的过期通知,和业务非常贴合. 键空间通知 下面是Redis中文文档的介绍 键空间 ...
- [转]使用DW正则表达式批量替换实例介绍
原文地址:http://www.jb51.net/Dreamweaver/86329.html 网站优化过程中,经常会遇到很多要批量修改的东西,一个个修改,明显效率低下.本文是使用DW正则表达式批量替 ...
- [设备]Linux设备是否可以被多个进程或者线程同时Open?
当然可以 只要底层driver没有对重复打开做特殊处理,一般都可以被两个进程open 那当两个进程同时打开一个设备,当此设备收到数据时,怎么能保证每个进程都能收到数据?
- 学习MongoDB(一) 如何在Linxu安装与启动
1.官方下载地址 https://www.mongodb.org/downloads#production,选择对应的Linxu版本. 2.mkdir -p /usr/mongodb 创建一个目录用来 ...
- Office2016无法显示最近使用的文档怎么办
来自:https://zhidao.baidu.com/question/1862342356245742187.html
- 安装corel x8提示你已安装了另外一个版本
如果之前安装了其他版本,提示安装不进去,需卸载visual c++ 2015 redistributable(x64)即可(测试环境是安装了x6后,x8安装不了) windows install cl ...
- OCiOS开发:音频播放器 AVAudioPlayer
简单介绍 AVAudioPlayer音频播放器可以提供简单的音频播放功能.其头文件包括在AVFoudation.framework中. AVAudioPlayer未提供可视化界面,须要通过其提供的播放 ...