首页 > 代码库 > 【WP8】键盘弹出时控制Frame位置
【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[0]; //TODO:当键盘隐藏时,把Frame恢复原处 translateTransform.Y = 0; //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[0] 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(); } }}
谢谢@阿布的分享
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。