gpt4 book ai didi

DockPanel 中的 WPF4 TabControl/Grid 隐藏了 StatusBar

转载 作者:行者123 更新时间:2023-12-03 18:40:18 24 4
gpt4 key购买 nike

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

至少,我希望 TabControl 填充主体。在可视化设计器中,TabControl 和 StatusBar 并排布置,而不是顶部和底部。当我运行应用程序时,TabControl 展开以填充 MenuBar 下方的 DockPanel,而 StatusBar 消失。 (我猜它正在被推离父窗口的可见 Canvas 。)

我尝试根据 this recommendation 设置垂直和水平对齐方式.
我尝试在状态栏上设置 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"与 Horizo​​ntalAlignment 和 VerticalAlignment="Stretch"一起添加到 TabControl,我能够让 TabControl 在可视化设计器中堆叠在 StatusBar 上方而不是紧挨着它。现在,对于我的一些 TabItem,状态栏只会在运行时消失。

我的 TabControl 数据绑定(bind)到一个 ViewModel,它公开了一个 UserControls 列表。每个 UserControl 都包含自己的数据绑定(bind) DataGrid(通常还有一些其他控件)。在 DataGrid 仅显示几行的选项卡中,TabControl 和 TabItem 仅拉伸(stretch)以包含 UserGrid,而 StatusBar 在页面底部可见。在 DataGrid 显示许多行的那些选项卡上,TabControl 拉伸(stretch)以填充窗口,以某种方式隐藏了 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 取决于添加项目的顺序。在添加占用剩余空间的项目之前,您必须先添加停靠的项目。在您的情况下,您只需将您的项目重新排列为如下所示:

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

关于DockPanel 中的 WPF4 TabControl/Grid 隐藏了 StatusBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3971623/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com