我有一个窗口,里面有一个包含3个元素的DockPanel,一个停靠在顶部的MenuBar,一个停靠在底部的StatusBar和一个填充主体的TabControl .
至少,我希望TabControl能够填充身体 . 在视觉设计器中,TabControl和StatusBar并排排列,而不是顶部和底部 . 当我运行应用程序时,TabControl会扩展以填充MenuBar下面的DockPanel,并且StatusBar会消失 . (我猜它被推离了父窗口的可见画布 . )
我尝试按this recommendation设置垂直和水平对齐 . 我尝试在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>
编辑:
通过将DockPanel.Dock = "Top"添加到TabControl以及HorizontalAlignment和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">
谢谢!
1 回答
DockPanel取决于添加项目的顺序 . 在添加占用剩余空间的项目之前,您必须先添加停靠项目 . 在您的情况下,您只需将项目重新排列为以下内容: