gpt4 book ai didi

WPF:GroupBox 动态高度

转载 作者:行者123 更新时间:2023-12-04 10:58:43 25 4
gpt4 key购买 nike

我在 WPF 组框中的停靠面板中有一个文本框和数据网格。

<GroupBox Margin="8,142.04,1.783,230.4" Height="Auto" Header="Desired Meeting Outcomes (decisions or actions)?" MaxWidth="635" MinWidth="550" FontWeight="Bold" FontSize="13.333" BorderBrush="#FFD5DFE5" MinHeight="106" VerticalContentAlignment="Stretch">
<DockPanel Margin="0">
<local:TextboxControl Margin="0" d:LayoutOverrides="Height, HorizontalMargin" Width="538.217" VerticalAlignment="Top" HorizontalAlignment="Left" DockPanel.Dock="Top"/>
<local: Height="Auto" HorizontalAlignment="Left" MinHeight="25" MinWidth="538" DockPanel.Dock="Top"/>
</DockPanel>
</GroupBox>

我正在从文本框中动态地在数据网格中添加行,导致数据网格增长。但是,即使它的高度设置为 Auto,我的 groupbox 的高度也不会动态增长。我怎样才能让我的 groupbox 根据它所包含的内容的大小来增长和缩小?

最佳答案

您在所有 4 个边上都设置了边距,垂直对齐为 Stretch。在 Grid 中,这基本上会给你一个 GroupBox,它的大小与它的父级而不是它的内容有关。从右侧和底部移除边距,并将 VerticalAlignment 更改为 Top。

边距是 L、T、R、B 的顺序。所以最后两个归零。 Height=Auto 和 VerticalContentAlignment=Stretch 是默认设置,因此您也可以摆脱它们。尽量保持 XAML 干净。

从标记中可以清楚地看出您使用的是 Blend 或 Visual Studio 的设计器。我建议将设计器用于“预览”模式而不是编辑。虽然它变得更好了,但我发现设计师在这两种产品中的布局行为非常令人沮丧。从长远来看,熟悉手动创建 XAML 会带来好处。

示例

根据评论,我添加了一个示例,说明如何拥有一个 DataGrid,它会导致其父元素根据高度自动增长。请注意,只有 Window 本身具有固定大小。对于一个窗口,如果你想让它基于高度增长,你可以设置 SizeToContent=Height。请注意,您只需要在最外层元素上设置 VerticalAlignment=Top。

主窗口.xaml

<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="640" Height="480">
<Grid x:Name="LayoutRoot" Background="Green" VerticalAlignment="Top">
<Border Margin="5" BorderBrush="Yellow" BorderThickness="4">
<GroupBox Header="Data Grid" Background="Orange">
<DataGrid x:Name="dg" AutoGenerateColumns="True" />
</GroupBox>
</Border>
</Grid>
</Window>

主窗口.xaml.cs
public partial class MainWindow : Window
{
public MainWindow( )
{
InitializeComponent( );

var items = new ObservableCollection<DateTime>( );
dg.ItemsSource = items;

var timer = new DispatcherTimer( );
timer.Interval = TimeSpan.FromSeconds( 2 );
timer.Tick += ( s, e ) => items.Add( DateTime.Now );
timer.Start( );
}
}

关于WPF:GroupBox 动态高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2346283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com