У меня есть окно, заполненное DockPanel, содержащее 3 элемента, MenuBar состыковался сверху, StatusBar состыковался внизу и TabControl, заполняющий тело.WPF4 TabControl/Grid в DockPanel скрывается StatusBar
По крайней мере, я бы хотел, чтобы TabControl заполнил тело. В визуальном дизайне TabControl и StatusBar выложены рядом друг с другом вместо верхнего & внизу. Когда я запускаю приложение, TabControl расширяется, чтобы заполнить DockPanel ниже MenuBar, и StatusBar исчезает. (Я предполагаю, что он отталкивается от видимого холста родительского окна.)
Я попытался установить вертикальное & горизонтальное выравнивание по this recommendation. Я попытался установить 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">
Спасибо!
Это сработало отлично! Спасибо, кармический. –
Такое поведение DockPanel настолько запутанно, но логически корректно. Спасибо, это решение помогло мне! – digitguy