【问题标题】: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="..."

标签: c# visual-studio xaml uwp


【解决方案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

    【讨论】:

      猜你喜欢
      • 2012-11-27
      • 2016-05-25
      • 2020-02-23
      • 2023-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-09
      相关资源
      最近更新 更多