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;

 

posted @ 2020-09-07 21:29  1nano  阅读(160)  评论(0编辑  收藏  举报