DockPanel中的WPF4 TabControl/Grid隐藏了StatusBar

Pau*_*vez 4 wpf statusbar dockpanel

我有一个窗口,里面有一个包含3个元素的DockPanel,一个停靠在顶部的MenuBar,一个停靠在底部的StatusBar和一个填充主体的TabControl.

至少,我希望TabControl能够填充身体.在视觉设计器中,TabControl和StatusBar并排排列,而不是顶部和底部.当我运行应用程序时,TabControl会扩展以填充MenuBar下面的DockPanel,并且StatusBar会消失.(我猜它被推离了父窗口的可见画布.)

我尝试根据此建议设置垂直和水平对齐.我尝试在StatusBar上设置ZIndex.我尝试使用堆栈面板(两者都停靠在DockPanel内并替换DockPanel).一切都无济于事:-(

以下是我用来渲染DockPanel的XAML的摘录.关于我做错的任何建议?有没有比使用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>
Run Code Online (Sandbox Code Playgroud)

编辑:

通过向TabControl 添加DockPanel.Dock ="Top"以及Horizo​​ntalAlignment和VerticalAlignment ="Stretch",我能够将TabControl放在StatusBar上方而不是在可视化设计器中的旁边.现在,StatusBar仅在运行时为某些TabItem消失.

我的TabControl被数据绑定到一个ViewModel,它暴露了一个UserControl列表.每个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">
Run Code Online (Sandbox Code Playgroud)

谢谢!

ASa*_*nch 9

DockPanel取决于添加项目的顺序.在添加占用剩余空间的项目之前,您必须先添加停靠项目.在您的情况下,您只需将项目重新排列为以下内容:

<DockPanel>
  <Menu DockPanel.Dock="Top".../>
  <StatusBar DockPanel.Dock="Bottom".../>
  <TabControl/>
</DockPanel>
Run Code Online (Sandbox Code Playgroud)