WPF:GroupBox动态高度

时间:2010-02-27 04:55:00

标签: wpf groupbox

我在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增长和缩小?

2 个答案:

答案 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”?