Wpf 当用户展开/折叠treeview时,如何使区域保持恒定/相对大小?
我有一个大小可变的窗口,当前为300 x 400,如下所示 在顶部,我有一个可展开的树状视图 在底部,我有一个长的水平面板,上面有一个按钮 我希望顶部区域(treeview)约为高度的95%,按钮工具区域的高度为常量50 我希望这些比例在用户展开和折叠树视图时保持不变(当它在按钮工具栏下方展开时,我希望viewscroller弹出一个滚动条 我如何才能做到这一点?这是目前为止我所能做的最好的事情,但是当用户折叠树状视图时,按钮区域会向上移动:Wpf 当用户展开/折叠treeview时,如何使区域保持恒定/相对大小?,wpf,xaml,layout,treeview,Wpf,Xaml,Layout,Treeview,我有一个大小可变的窗口,当前为300 x 400,如下所示 在顶部,我有一个可展开的树状视图 在底部,我有一个长的水平面板,上面有一个按钮 我希望顶部区域(treeview)约为高度的95%,按钮工具区域的高度为常量50 我希望这些比例在用户展开和折叠树视图时保持不变(当它在按钮工具栏下方展开时,我希望viewscroller弹出一个滚动条 我如何才能做到这一点?这是目前为止我所能做的最好的事情,但是当用户折叠树状视图时,按钮区域会向上移动: <Window x:Class="TestSi
<Window x:Class="TestSize8383.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="400">
<Window.Resources>
<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="True" />
</Style>
</Window.Resources>
<DockPanel Background="Beige" Margin="3" LastChildFill="False">
<ScrollViewer DockPanel.Dock="Top" Background="White" Margin="3">
<TreeViewItem DockPanel.Dock="Top" Background="White" Header="Page 1" IsExpanded="True">
<TreeViewItem Header="Part 1">
<TreeViewItem Header="Paragraph 1">
<TreeViewItem Header="Word 1"/>
<TreeViewItem Header="Word 2"/>
</TreeViewItem>
<TreeViewItem Header="Paragraph 2">
<TreeViewItem Header="Word 1"/>
<TreeViewItem Header="Word 2"/>
</TreeViewItem>
<TreeViewItem Header="Paragraph 3">
<TreeViewItem Header="Word 1"/>
<TreeViewItem Header="Word 2"/>
</TreeViewItem>
<TreeViewItem Header="Part 2">
<TreeViewItem Header="Paragraph 1">
<TreeViewItem Header="Word 1"/>
<TreeViewItem Header="Word 2"/>
</TreeViewItem>
<TreeViewItem Header="Paragraph 2">
<TreeViewItem Header="Word 1"/>
<TreeViewItem Header="Word 2"/>
</TreeViewItem>
<TreeViewItem Header="Paragraph 3">
<TreeViewItem Header="Word 1"/>
<TreeViewItem Header="Word 2"/>
</TreeViewItem>
</TreeViewItem>
</TreeViewItem>
</TreeViewItem>
</ScrollViewer>
<StackPanel DockPanel.Dock="Bottom" Background="Tan" Margin="3" Height="50">
<Button Content="Previous" Margin="5"/>
</StackPanel>
</DockPanel>
</Window>
用网格代替DockPanel怎么样
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="50" />
</Grid.RowDefinitions>
<ScrollViewer Grid.Row="0">
...
</ScrollViewer>
<StackPanel Grid.Row="1">
...
</StackPanel>
</Grid>
...
...
根据您描述的固定布局,我将使用网格而不是DockPanel,如下所示:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="50" />
</Grid.RowDefinitions>
<ScrollViewer Grid.Row="0">
<TreeView>
<!-- items excluded for brevity -->
</TreeView>
</ScrollViewer>
<StackPanel Grid.Row="1" Background="Tan" Margin="3">
<Button Content="Previous" Margin="5" />
</StackPanel>
</Grid>
您说过按钮的高度必须恒定在50左右,然后您立即谈论比例?我不确定我是否理解您的意思,但这是我目前为您准备的
- 使DockPanel具有LastChildFill=True
- 将StackPanel置于ScrollViewer上方(XAML代码中的第一个)
- 使ScrollViewer具有VerticalScrollBarVisibility=“自动”
- 按钮栏将始终可见
- 当只需要滚动条时,滚动条将弹出视图