gpt4 book ai didi

c# - 绑定(bind)到 UWP 中另一个元素的大小(宽度/高度)的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-04 14:25:16 26 4
gpt4 key购买 nike

UWP 有一个设计问题:ActualHeight/ActualWidth,存储布局操作的结果,总是一个实数。但是,因为它们更新如此频繁,所以 UWP 不会在它们更改时通知。

高度/宽度确实提供更改通知,但通常可能为 NaN,例如当对象设置为拉伸(stretch)以填充父对象时。

答案似乎是:不要。订阅 SizeChanged 并使用 ActualHeight 和 ActualWidth 直接调整取决于大小的属性。

但是,我遇到了后者的另一个问题,并不是所有的子控件都正确重绘,这似乎是因为 SizeChanged 事件有时会被删除,所以一些子控件会卡在旧的大小值上。随着快速调整大小,此问题变得更加明显。缓慢的小尺寸调整会导致它们正确重绘。我猜测,为了提高性能,UWP 渲染框架试图减少绘制时发生的工作量。

执行此操作的正确方法是什么?和/或如果我继续使用 SizeChanged,我如何确保呈现最终值,或者减少完成的工作以便接收所有 SizeChanged 事件?

(带 Win10 16299 SDK)

更新:SizeChanged 的​​错误行为部分是由于我对事件处理程序逻辑的错误排序。但是,存在一些阈值框架,其中应放置相同位置的对象未对齐。经过进一步检查,这似乎是网格定位中的错误。

最佳答案

假设您有 2 个元素:一个 TextBox 和一个 ComboBox。您希望每当文本框的大小发生变化时,组合框的大小也应该发生变化。参见 this .

<TextBox Name="TextBox1"></TextBox>
<ComboBox Width={Binding ElementName=TextBox1 Path=Width}
Height={Binding ElementName=TextBox1 Path=Height}><ComboBox/>

如果你想在cs文件中绑定(bind)。你可以这样做:

    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);

有关代码文件中绑定(bind)的更多信息,请参阅 this , 和 this

关于c# - 绑定(bind)到 UWP 中另一个元素的大小(宽度/高度)的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46820444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com