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

标签 c# xaml uwp uwp-xaml

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/

相关文章:

c# - 如何实现不将响应封装在 XML 中的 .Net WebService?

c# - 执行停止无一异常(exception)

c# - StackExchange RedisValue ToByteArray 不可序列化

c# - 是否有模拟 facebook 的 "Link Detect"的库?

c# - 如何访问另一个控件的 viewModel

c# - 如何避免 WPF 验证中的错误图标与其他元素重叠

xaml - Metro XAML - TemplateBinding 和 SolidColorBrush 的问题

uwp - 使用 UWP 主从更改详细信息项目

c# - C#中如何拦截http请求?

uwp - 复制 UWP RichEditBox 内容会添加额外的行