Почему высота неверна? - PullRequest
1 голос
/ 20 июля 2011

У меня есть простая форма WPF со следующим XAML

<Window x:Class="ReikartzDataConverter.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="650" Width="800">
    <Grid Width="780" Height="650">
        <Grid.RowDefinitions>
            <RowDefinition Height="50"></RowDefinition>
            <RowDefinition Height="500"></RowDefinition>
            <RowDefinition Height="50"></RowDefinition>
            <RowDefinition Height="50"></RowDefinition>
        </Grid.RowDefinitions>

        <Label Grid.Row="0" Content="Process information" Height="28" HorizontalAlignment="Left" Margin="0,20,0,0" Name="label1" VerticalAlignment="Top" Width="235" />
        <DataGrid Grid.Row="1" Width="780" Height="500" Name="paysTable">            
        </DataGrid>
        <Label Grid.Row="2" Height="28" Name="lblError" VerticalAlignment="Top" Visibility="Hidden" Foreground="OrangeRed" FontWeight="Bold" FontSize="12" />
        <Button Grid.Row="3" Content="Quit" Height="23" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
        <Button Grid.Row="3" Content="Start" Height="23" Name="button2" VerticalAlignment="Top" Width="75" Click="button2_Click" />
    </Grid>
</Window>

Почему мои 2 кнопки из Grid.Row = "3" частично расположены вне видимой части окна?

Мое окно имеет высоту = "650", а моя сетка также имеет высоту = "650". У меня есть 4 строки: 50, 50, 500, 50. Таким образом, последний ряд должен находиться внутри окна.Почему не так?

Ответы [ 2 ]

2 голосов
/ 20 июля 2011

@ Ответ ColinE - правильный подход в том смысле, что вам следует использовать «плавный» макет в WPF, но если вы действительно хотите иметь фиксированную высоту для своего контента и вам нужно, чтобы окно было правильного размера, вы можете использовать SizeToContent свойство:

<Window x:Class="ReikartzDataConverter.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Width="800"
    SizeToContent="Height">

    <Grid Width="780" Height="650">
        ...
    </Grid>
</Window>

Если для параметра SizeToContent установлено значение «Высота», размер окна будет изменен по вертикали, чтобы его содержимое соответствовало размеру. Не забудьте удалить свойство Height из объявления Window.

2 голосов
/ 20 июля 2011

Высота окна 650 также включает в себя «хром», то есть полосу в верхней части окна с кнопками свертывания и сворачивания. Это гораздо лучший подход для создания макета, который не зависит от конкретной высоты. В вашем случае, я бы сделал строку, которая содержит вашу сетку с авторазмером:

    <Grid.RowDefinitions>
        <RowDefinition Height="50"></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="50"></RowDefinition>
        <RowDefinition Height="50"></RowDefinition>
    </Grid.RowDefinitions>

Затем вы можете удалить высоту / ширину из вашей сетки и всех других элементов пользовательского интерфейса, просто дайте сетке определять размер своих дочерних элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...