Я хочу иметь заголовок, затем ниже ScrollViewer
с ItemsControl
, затем ниже этого нижнего колонтитула.Что-то вроде:
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid ShowGridLines="True">
<Grid.Resources>
<Style TargetType="TextBlock">
<Setter Property="FontSize" Value="36"/>
</Style>
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0">Header</TextBlock>
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto">
<ItemsControl>
<ItemsControl.Items>
<TextBlock>Item 1</TextBlock>
<TextBlock>Item 2</TextBlock>
<TextBlock>Item 3</TextBlock>
<TextBlock>Item 4</TextBlock>
<TextBlock>Item 5</TextBlock>
</ItemsControl.Items>
</ItemsControl>
</ScrollViewer>
<TextBlock Grid.Row="2">Footer</TextBlock>
</Grid>
</Window>
Выше почти то, что я хочу, за исключением того, что средний ряд жадный;даже если окно очень высокое, оно занимает столько места, сколько может, толкая нижний колонтитул к нижней части окна.
Если я изменю определение среднего ряда на Height="Auto"
, оно занимает точноколичество места, которое ему нужно, даже если это пространство недоступно, поэтому ScrollViewer
никогда не отображает полосу прокрутки, и нижний колонтитул теряется в нижней части окна, если окно недостаточно высокое.
Как мне сделать так, чтобы, если окно было достаточно высоким, чтобы все могло поместиться, нижний колонтитул находился сразу под ItemsControl
, но если окно недостаточно высокое, ScrollViewer
показывает полосу прокрутки инижний колонтитул находится внизу окна?
Мне не обязательно делать это с Grid
, но я не нашел другого Panel
, который бы делал то, что я хочу.Например, DockPanel
с заголовком, установленным на DockPanel.Dock="Top"
, нижним колонтитулом, установленным на DockPanel.Dock="Bottom"
, и ItemsControl
, заполняющим остальное, ведет себя точно так же.
Некоторые другие вещи, которые я пробовал:
- Настройка
VerticalAlignment="Stretch"
в нижнем колонтитуле TextBlock
: без изменений. - Создание строки нижнего колонтитула
Height="*"
: все еще не то, что я хочу;нижний колонтитул и ItemsControl
имеют одинаковую высоту, поэтому нижний колонтитул занимает слишком много места большую часть времени, или, если вы сделаете окно очень коротким, оно уходит за нижнюю часть окна.