打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
UWP控件高度设为自动时获取其高度

想要实现的东西

——————————————————————————————————

  • 在一个大panel里面有俩个StackPanel,布局为垂直,上面的panel里面放入一个高度自动的TextBlock,下面则是一个高度自动的输入文本框TextBox,垂直居中。
  • 当下面文本框输入文字时其高度自动变化,同时用回车键把这段文字赋值给上面的textblock,我呢希望上面的panel包裹着这里面的textblock一同向上移动,使得底部与下面的panel始终相切。

遇到的问题

——————————————————————————————————

  • 要移动上面的panel可以通过动态修改其margin来改变其位置,而其margin里面的Top值 = 大panel.Height - 上panel.Height - 下panel.Height - 下panel.Margin.Bottom;
  • 大panel与下panel都是xaml里面设置的,而上panel是在下panel的回车键事件创建的,所以当上panel高度为自动高度时,上面的margin计算中获取到的上panel.Height值为NaN,也就无法得到上panel的margin的Top值。

解决方法

——————————————————————————————————

  • 当一个控件高度设置为自动值时我们不能直接获取它的高度值,可以考虑间接方法
  • 例如这样——上panel.Height = 大panel.Height - 上panel.margin.top - 上panel.margin.bottom;
  • 尽管margin.top与margin.bottom值也许不对,但计算所得的height值一定是正确的
  • 利用控件的ActualHeight可以近似获取TextBlock的高度,条件是这个控件必须在尺寸上发生过变化,例如sizeChanged
  • 可以参考https://www.cnblogs.com/maomiyouai/p/3557349.html

一点猜想~

——————————————————————————————————

  •  那些高度设为Auto的控件的高度数值可以在其SizeChange事件发生时获取,这样利用全局变量就可以获取该控件的高度值
  • 经过验证发现TextBox是可以的而TextBlock不行

巨人的肩膀

——————————————————————————————————

  • 想要使后台用C#设置动态创建的控件高度为Auto可以这样弄
  • 控件名.Height = Double.NaN;

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
一步一步学Silverlight 2系列(3):界面布局
继续聊WPF——BulletDecorator控件
Windows Phone新手开发教程(一)
课件设计中窗口最大化问题一例
Silverlight中OneTime,OneWay,TwoWay及INotifyPropertyChanged 接口的理解
【冰极峰教程系列之二】:牢不可破的九宫格布局
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服