网格大小不绑定到父容器的大小

Posted

技术标签:

【中文标题】网格大小不绑定到父容器的大小【英文标题】:Grid size doesn't bind to parent container's size 【发布时间】:2021-09-10 02:11:49 【问题描述】:

我正在尝试将 Grid 的大小绑定到页面的 XAML 中的父容器(自动大小的相对面板,名为“MainPanel”)的大小,如下所示:

<Grid Width="Binding ElementName=MainPanel, Path=ActualWidth">

这样做之后,它可以在设计器中运行,但是一旦我运行应用程序,它就会再次缩小(并且在设计器中这样做)。

我也试过了:

<Grid Width="Binding ActualWidth, ElementName=MainPanel">

并删除了我所有与控件交互的代码。

这里有什么问题? (VS 2019 中的通用 Windows 应用)

【问题讨论】:

Grid 默认填充其父容器。尝试删除Width="..." 【参考方案1】:

是的,我看到了这个问题,它在 UWP 平台中不起作用,但在 WPF 平台中运行良好。请参考ActualHeightProperty备注部分

虽然它有一个 ActualHeightProperty 支持字段,但 ActualHeight 不会引发属性更改通知,它应该被视为常规 CLR 属性而不是依赖属性。

根据您的要求,您可以使用 Microsoft.Toolkit FrameworkElement Extensions 进行实际尺寸绑定。

安装Microsoft.Toolkit.Uwp.UI.Controlsnuget,然后像下面这样设置扩展

xmlns:ui="using:Microsoft.Toolkit.Uwp.UI"
......
<RelativePanel
    x:Name="MainPanel"
    ui:FrameworkElementExtensions.EnableActualSizeBinding="True"
    SizeChanged="MainPanel_SizeChanged">
    <Grid
        Width="Binding ElementName=MainPanel, Path=(ui:FrameworkElementExtensions.ActualWidth)"
        Height="100"
        Background="SeaGreen" />
</RelativePanel>

更多详情请参考tutorial。

【讨论】:

【参考方案2】:

ActualWidth 不是 DependencyProperty,绑定只看到此属性的第一个值,在应用它们时为 0。您必须使用事件处理程序或自定义行为手动处理 SizeChanged 事件:https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.frameworkelement.sizechanged?view=winrt-19041

【讨论】:

以上是关于网格大小不绑定到父容器的大小的主要内容,如果未能解决你的问题,请参考以下文章

在容器 Kendo 窗口调整大小时动态更改 Kendo Grid 行的高度

sh 请参阅apache容器中的卷大小和挂载绑定

更改字体大小以适应可变宽度容器

如何将字体大小绑定到可变网格大小

如何使用相对于容器大小的项目初始化 UICollectionViewController?

在屏幕调整大小时将布局从行更改为网格