添加内容时调整 C# WPF 网格大小

本文关键字:WPF 网格 调整 添加 | 更新日期: 2023-09-27 18:34:16

我在滚动查看器中有一个网格,我想在添加内容时重新调整大小。目前,如果我在视图中添加一个按钮,它不会调整大小。这很奇怪...但不是我的主要关注点。我主要关心的是,如果我以编程方式将元素添加到网格中,它会调整大小。如果不是,那么我应该使用什么来调整它的大小。

这是当前的想法

<DockPanel HorizontalAlignment="Left" Height="266" LastChildFill="False" VerticalAlignment="Top" Width="434">
    <Menu Height="20" VerticalAlignment="Top" DockPanel.Dock="Top">
        <MenuItem Header="MenuItem">
            <MenuItem Header="MenuItem" HorizontalAlignment="Left" Width="145"/>
        </MenuItem>
    </Menu>
    <ScrollViewer DockPanel.Dock="Bottom" Height="246" RenderTransformOrigin="0.5,0.5">
        <Grid Height="173" Width="100"/>
    </ScrollViewer>
</DockPanel>

添加内容时调整 C# WPF 网格大小

您尝试使用网格的方式不是它的工作方式。要使其正常工作,您必须至少定义行或列。然后,可以将控件放置在特定的行和列中。看起来在您的情况下,您只需要一行和一列。它在行/列定义中定义大小以及是否应调整大小。

<ScrollViewer DockPanel.Dock="Bottom" Height="246" RenderTransformOrigin="0.5,0.5">
    <Grid>
        <!--Define rows and columns-->
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>            
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <!--Place a control in the grid-->
        <Button Grid.Row="0" Grid.Column="0" Width="100" Height="100"/>
    </Grid>
</ScrollViewer>

"Height"和"Width"属性设置为 Auto 。这意味着他们将根据内容的大小重新调整自己。例如,在上面的示例中,按钮的高度和宽度都设置为 100。这意味着行和列将保持这些值。

嗨,

尝试从 DockPanel 中删除 Width="434",并从您的控件中删除其他宽度 Width="100",如果宽度是固定的,则无法调整大小,您应该删除 width 属性,我希望有效

编辑:您可以使用StackPanel enstead Grid,您的问题是当您添加某些元素时,它会添加另一个元素的顶部。XAML 代码:

 <DockPanel HorizontalAlignment="Left" VerticalAlignment="Top"  >
    <Menu Height="20" VerticalAlignment="Top" DockPanel.Dock="Top">
        <MenuItem Header="MenuItem">
            <MenuItem Header="MenuItem" HorizontalAlignment="Left" Width="145"/>
        </MenuItem>
    </Menu>
    <ScrollViewer DockPanel.Dock="Bottom" >
        <StackPanel Name="uiStack" Orientation="Vertical">

        </StackPanel>
    </ScrollViewer>
    <Button Content="Click me" Click="Button_Click"></Button>
</DockPanel>

代码背后:

 private void Button_Click(object sender, RoutedEventArgs e)
    {
        uiStack.Children.Add(new Button() { Content = "Button1" });
        uiStack.Children.Add(new TextBlock() { Text = "Button1" }); 
    }