9

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>

テキストボックスから動的にデータグリッドに行を追加しているため、データグリッドが大きくなります。ただし、グループボックスの高さが自動に設定されていても、グループボックスの高さが動的に増加しません。保持するコンテンツのサイズに基づいて、グループボックスを拡大および縮小するにはどうすればよいですか?

4

2 に答える 2

12

Stretch の VerticalAlignment を使用して、4 つの側面すべてにマージンが設定されています。Grid では、これは基本的に、コンテンツではなく親でサイズ変更される GroupBox を提供します。右と下からマージンを削除し、VerticalAlignment を Top に変更します。

余白は L、T、R、B の順です。したがって、最後の 2 つをゼロにします。Height=Auto と VerticalContentAlignment=Stretch はデフォルトであるため、これらも削除できます。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( );
    }
}
于 2010-02-27T08:44:37.857 に答える
1

GroupBox のコンテナは何ですか? 成長を妨げてしまう可能性があります。

たとえば、コンテナーが Windows の場合、 SizeToContent="Height" はありますか?

于 2010-02-27T08:36:17.940 に答える