Pergunta

Eu tenho uma caixa de texto e datagrid dentro de um DockPanel que está em um WPF GroupBox.

<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>

Estou adicionando linhas no datagrid dinmaicamente da caixa de texto, fazendo com que o datagrid cresça. No entanto, a altura do meu grupo não está crescendo dinamicamente, mesmo que sua altura esteja definida como automática. Como posso fazer com que minha caixa de grupo cresça e diminua com base no tamanho do conteúdo que ele possui?

Foi útil?

Solução

Você tem margens definidas em todos os 4 lados com um alinhamento vertical de alongamento. Em uma grade, isso basicamente fornecerá uma caixa de grupo que tamanhos com seus pais, mas não com o conteúdo. Remova a margem da direita e do fundo e altere o alinhamento vertical para cima.

As margens são a ordem de L, T, R, B. So zero nos dois últimos. Altura = Auto e VerticalContentalignment = Stretch são os padrões para que você possa se livrar deles também. Tente manter o XAML o mais limpo possível.

Está claro pela marcação que você está usando o designer do Blend ou do Visual Studio. Eu sugeriria o uso do designer para o modo "visualização" em vez de editar. Embora tenha ficado muito melhor, acho que o comportamento do layout do designer em ambos os produtos é muito frustrante. Familiarizar -se com a criação de XAML manualmente paga dividendos a longo prazo.

EXEMPLO

De acordo com os comentários, estou adicionando um exemplo de como você teria um datagrid que faz com que seus elementos pais cresçam automaticamente com base na altura. Observe que apenas a janela em si tem um tamanho fixo. Para uma janela, se você quiser fazer com que cresça com base na altura, pode definir sizetocontent = altura. Observe como você só precisa definir verticalAnigment = topo no elemento mais externo.

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( );
    }
}

Outras dicas

Qual é o contêiner da caixa de grupo? Pode impedir que ele cresça.

Por exemplo, se o contêiner for o Windows, ele tem sizetocontent = "altura"?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top