我在WPF组合框中的dockpanel内部有一个文本框和数据网格。
<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>
我正在从文本框中动态添加数据网格中的行,从而导致数据网格增长。但是,即使其高度设置为“自动”,我的组合框的高度也不会动态增长。如何根据其所包含的内容大小使我的groupbox增长和缩小?
答案 0 :(得分:10)
您在所有4个边上都设置了边距,并使用了VerticalAlignment of Stretch。在Grid中,这基本上会为您提供一个GroupBox,其大小与其父级而不是其内容。从右侧和底部删除边距,并将VerticalAlignment更改为Top。
边距是L,T,R,B的顺序。所以最后两个为零。高度=自动和VerticalContentAlignment =拉伸是默认值,因此您也可以摆脱它们。尽量保持XAML尽可能干净。
从标记中可以清楚地看到,您正在使用Blend或Visual Studio的设计器。我建议使用设计器进行“预览”模式而不是编辑。虽然它变得更好,但我发现设计师在两种产品中的布局行为都非常令人沮丧。从长远来看,熟悉手工创建XAML会带来好处。
示例强>
根据评论,我正在添加一个示例,说明如何使DataGrid导致其父元素根据高度自动增长。请注意,只有Window本身具有固定大小。对于一个窗口,如果你想让它根据高度增长,你可以设置SizeToContent = Height。注意你只需要在最外面的元素上设置VerticalAlignment = Top。
MainWindow.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>
MainWindow.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( );
}
}
答案 1 :(得分:1)
GroupBox的容器是什么?它可以防止它的增长。
例如,如果容器是Windows,它是否具有SizeToContent =“Height”?