UWP存在设计问题: ActualHeight / ActualWidth(存储布局操作的结果)始终是实数。但是,由于它们经常更新,因此UWP在更改时不会通知。
高度/宽度确实提供更改通知,但通常可能是NaN,就像将对象设置为拉伸以填充父级一样。
似乎答案是:不要。订阅SizeChanged并使用ActualHeight和ActualWidth直接调整依赖于大小的属性。
然而,我遇到了后者的另一个问题,即并非所有子控件都正确地重绘,这似乎是因为SizeChanged事件有时会被丢弃,因此一些子控件会被旧的大小值卡住。快速调整大小会使此问题更加明显。缓慢的小调整大小会导致它们正确重绘。我猜测为了性能,UWP渲染框架试图减少绘图时发生的工作量。
这样做的正确方法是什么?和/或如果我继续使用SizeChanged,我如何确保呈现最终值,或者减少完成的工作以便接收所有SizeChanged事件?
(w / Win10 16299 SDK)
更新:SizeChanged的错误行为部分是由于我对事件处理程序逻辑的错误排序。但是,存在窗框,其中应该相同定位的对象未对齐。在进一步检查时,这似乎是网格定位中的一个错误。
答案 0 :(得分:2)
假设您有2个元素:TextBox和ComboBox。您希望每当文本框的大小发生变化时,组合框的大小也应该更改。请参阅this。
<TextBox Name="TextBox1"></TextBox>
<ComboBox Width={Binding ElementName=TextBox1 Path=Width}
Height={Binding ElementName=TextBox1 Path=Height}><ComboBox/>
如果要在cs文件中绑定。你可以这样做:
TextBox TextBox1=new TextBox();
Binding WidthBinding=new Binding();
WidthBinding.Source=ViewModelClass;
WidthBinding.Path=new PropertyPath("WidthPropertyInViewModelClass");
WidthBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
BindingOperations.SetBinding(TextBox1, TextBox.WidthProperty, WidthBinding);