2010-10-19 2 views
4

У меня есть окно, заполненное 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"> 

Спасибо!

ответ

9

DockPanel зависит от заказа товара. Прежде чем добавлять элемент, который занимает оставшееся пространство, вам нужно будет добавить пристыкованные элементы. В вашем случае вам просто нужно переставить свои вещи примерно так:

<DockPanel> 
    <Menu DockPanel.Dock="Top".../> 
    <StatusBar DockPanel.Dock="Bottom".../> 
    <TabControl/> 
</DockPanel> 
+0

Это сработало отлично! Спасибо, кармический. –

+1

Такое поведение DockPanel настолько запутанно, но логически корректно. Спасибо, это решение помогло мне! – digitguy