DockPanel中的WPF4 TabControl/Grid正在隐藏状态栏
我有一个窗口,里面有一个DockPanel,其中包含3个元素,一个菜单栏停靠在顶部,一个状态栏停靠在底部,一个选项卡控件填充主体 至少,我希望TabControl填充身体。在可视化设计器中,TabControl和StatusBar并排布置,而不是顶部和底部。当我运行应用程序时,TabControl展开以填充菜单栏下方的DockPanel,状态栏消失。(我猜它是从父窗口的可见画布上推出的。) 我尝试按照设置垂直和水平对齐。 我试着在状态栏上设置ZIndex。 我尝试使用堆栈面板(都停靠在DockPanel内部并替换DockPanel)。 一切都无济于事:-( 下面是我用来呈现DockPanel的XAML的摘录。对我做错了什么有什么建议吗?有没有比使用DockPanel更好的方法DockPanel中的WPF4 TabControl/Grid正在隐藏状态栏,wpf,statusbar,dockpanel,Wpf,Statusbar,Dockpanel,我有一个窗口,里面有一个DockPanel,其中包含3个元素,一个菜单栏停靠在顶部,一个状态栏停靠在底部,一个选项卡控件填充主体 至少,我希望TabControl填充身体。在可视化设计器中,TabControl和StatusBar并排布置,而不是顶部和底部。当我运行应用程序时,TabControl展开以填充菜单栏下方的DockPanel,状态栏消失。(我猜它是从父窗口的可见画布上推出的。) 我尝试按照设置垂直和水平对齐。 我试着在状态栏上设置ZIndex。 我尝试使用堆栈面板(都停靠在DockP
<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>
编辑:
通过将DockPanel.Dock=“Top”与HorizontalAlignment&VerticalAlignment=“Stretch”一起添加到TabControl中,我能够使TabControl堆叠在状态栏上方,而不是在可视化设计器中的状态栏旁边。现在,对于我的一些TabItem,状态栏只在运行时消失
My TabControl被数据绑定到一个ViewModel,该ViewModel公开一个UserControl列表。每个UserControl都包含自己的数据绑定DataGrid(通常还有一些其他控件)。在DataGrid仅显示几行的选项卡中,TabControl和TabItem仅拉伸以包含UserGrid,使状态栏在页面底部可见。在DataGrid显示多行的选项卡上,TabControl拉伸以填充窗口,以某种方式隐藏状态栏
如果有帮助,以下是我的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取决于添加项目的顺序。在添加占用剩余空间的项目之前,您必须先添加已停靠的项目。在您的情况下,您只需将项目重新排列为如下所示:
<DockPanel>
<Menu DockPanel.Dock="Top".../>
<StatusBar DockPanel.Dock="Bottom".../>
<TabControl/>
</DockPanel>
DockPanel的这种行为非常混乱,但逻辑上却非常正确。谢谢,这个解决方案帮助了我!