网格大小不绑定到父容器的大小
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.Controls
nuget,然后像下面这样设置扩展
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 行的高度