У меня есть окно, заполненное DockPanel, содержащим 3 элемента: MenuBar, закрепленный вверху, StatusBar, закрепленный внизу, и TabControl, заполняющий тело.
По крайней мере, хотелось бы, чтобы TabControl заполнил тело. В визуальном конструкторе TabControl и StatusBar расположены рядом, а не сверху и снизу. Когда я запускаю приложение, TabControl расширяется, заполняя DockPanel под MenuBar, а StatusBar исчезает. (Я предполагаю, что он отталкивается от видимого холста родительского окна.)
Я попытался установить вертикальное и горизонтальное выравнивание в соответствии с этой рекомендацией . Я попытался установить ZIndex в StatusBar. Я попытался использовать панель стека (обе закреплены внутри DockPanel и заменили DockPanel). Все без толку :-(
Ниже приводится отрывок из XAML, который я использую для рендеринга DockPanel. Есть предложения о том, что я делаю неправильно? Есть ли лучший способ сделать это, чем использовать DockPanel?
<DockPanel>
<Menu Name="_menu" Height="23" HorizontalAlignment="Stretch" VerticalAlignment="Top" DockPanel.Dock="Top">
<MenuItem Header="_User Maintenance">
</MenuItem>
</Menu>
<TabControl
x:Name="_panel"
ItemsSource="{Binding Path=AllTabs}"
Margin="0,0,0,0"
Visibility="{Binding Path=Visibility}"
DockPanel.Dock="Top"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
>
</TabControl>
<StatusBar Name="_statusBar" DockPanel.Dock="Bottom" Margin="0,0,0,0" VerticalAlignment="Bottom">
<StatusBar.ItemsPanel>
<ItemsPanelTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="26"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</StatusBar.ItemsPanel>
<StatusBarItem Grid.Column="0" Grid.Row="0">
<ProgressBar Name="_progressBar" Height="20" IsIndeterminate="True" Margin="4,0,4,0" VerticalAlignment="Top" Width="600"/>
</StatusBarItem>
</StatusBar>
</DockPanel>
Edit:
Добавив DockPanel.Dock = "Top" в TabControl вместе с HorizontalAlignment и VerticalAlignment = "Stretch", я смог заставить TabControl складываться над StatusBar, а не рядом с ним на визуальном уровне. дизайнер. Теперь StatusBar исчезает только во время выполнения для некоторых из моих TabItems.
My TabControl привязан к ViewModel, который предоставляет список UserControls. Каждый UserControl содержит собственную DataGrid с привязкой к данным (и обычно несколько других элементов управления). На тех вкладках, для которых DataGrid отображает только несколько строк, TabControl и TabItem растягиваются только для размещения UserGrid, оставляя StatusBar видимым внизу страницы. На тех вкладках, где DataGrid показывает много строк, TabControl растягивается, чтобы заполнить окно, каким-то образом скрывая StatusBar.
Если это поможет, вот мое определение DataGrid:
<DataGrid
Name="_customerGrid"
Grid.Column="0"
Grid.ColumnSpan="3"
Grid.Row="1"
AutoGenerateColumns="False"
CanUserSortColumns="True"
ColumnHeaderStyle="{StaticResource columnHeaderStyle}"
HorizontalAlignment="Left"
ItemsSource="{Binding Path=AllCustomers}"
RowDetailsVisibilityMode="VisibleWhenSelected"
RowStyle="{StaticResource DataGridRowStyle}"
SelectionUnit="FullRow"
VerticalAlignment="Top">
Спасибо!