如何在不破坏网格星号的情况下在代码中设置 width/height?

How to set width/height in code without breaking Grid star-size?

我有一些像这样的 XAML 代码:

<ScrollViewer VerticalScrollMode="Auto">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <Grid x:Name="g1" Grid.Row="0" Background="Pink"/>
        <Grid x:Name="g2" Grid.Row="1" Background="Green"/>
    </Grid>
</ScrollViewer>

<Button Content="Update Size" Width="150" Height="50" Click="Button_Click" Margin="105,342,0,248"/>

和后面的代码:

private void Button_Click(object sender, RoutedEventArgs e)
{
    g1.Width = mainGrid.ActualWidth;
    g1.Height = mainGrid.ActualHeight / 2;
}

点击按钮前显示如下:

点击按钮后将window拖大一点,看起来像这样:

所以我的问题是,在单击按钮之前,如果您将 window 拖到星形大小作品周围并在 window 调整大小时调整两个 top/bottom 网格的大小,但是在单击设置 g1 宽度和高度的按钮,它打破了星号调整。设置宽度和高度后,如何让星形调整再次起作用?

提前致谢。

how do i bring the star-sizing back to work again after set the width and height?

设置网格的宽度和高度后 g1,您打破了自动调整星形尺寸。但是您可以使用 Window.SizeChanged 事件来监视应用程序 window 视图的大小变化。当window大小改变时,自行为g1动态设置新的高度和宽度以适合父控件mainGrid

如下代码将满足您当前的要求。

 public Strangelaout()
 {
     this.InitializeComponent();
     Window.Current.SizeChanged += Current_SizeChanged;
 }

 private void Current_SizeChanged(object sender, Windows.UI.Core.WindowSizeChangedEventArgs e)
 {
     g1.Width = mainGrid.ActualWidth;
     g1.Height = mainGrid.ActualHeight / 2;
 }

 private void Button_Click(object sender, RoutedEventArgs e)
 {
     g1.Width = mainGrid.ActualWidth;
     g1.Height = mainGrid.ActualHeight / 2;
 }