我正在使用网格的WPF应用程序,网格内部有几个TreeViews:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Text="Header"/>
<TreeView x:Name="Tree1"" Grid.Row="2"/>
<TextBlock Text="SecondHeader" Grid.Row="2"/>
<TreeView x:Name="Tree2" Grid.Row="3"/>
</Grid>
使用此设置,标题的大小将与网格的大小成比例。
问题发生在我有一棵树变小的时候,我在两棵树之间都有一个白色空间,如果第一棵树是空的,它也会占据网格的一半。
如果我将代码更改为:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Text="Header"/>
<TreeView x:Name="Tree1"" Grid.Row="2"/>
<TextBlock Text="SecondHeader" Grid.Row="2"/>
<TreeView x:Name="Tree2" Grid.Row="3"/>
</Grid>
我得到的结果与我想要的非常相似,但在这种情况下,树的滚动条不会显示出来,因为树会占据他们需要的所有区域,它会溢出我的网格。
如果我将第二个解决方案包含在scrollviewer中,我会得到整个网格的常用滚动条:
<ScrollViewer><Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Text="Header"/>
<TreeView x:Name="Tree1"" Grid.Row="2"/>
<TextBlock Text="SecondHeader" Grid.Row="2"/>
<TreeView x:Name="Tree2" Grid.Row="3"/>
</Grid></ScrollViewer>
这个解决方案的问题是:如果第一棵树足够长,除非向下滚动,否则用户将看不到第二棵树,并且要求两棵树始终可见。
恢复我需要具有以下功能的设置:
有什么想法吗?
答案 0 :(得分:0)
也许这是您需要的1和2功能的解决方案:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto" MinHeight="131"/>
<RowDefinition Height="auto" MinHeight="171"/>
</Grid.RowDefinitions>
<TreeView x:Name="Tree1" Grid.Row="0" HorizontalAlignment="Left" Height="100">
<TreeViewItem Header="Header">
<TreeViewItem Header="item 1"></TreeViewItem>
<TreeViewItem Header="item 2"></TreeViewItem>
<TreeViewItem Header="item 3"></TreeViewItem>
<TreeViewItem Header="item 4"></TreeViewItem>
<TreeViewItem Header="item 5"></TreeViewItem>
<TreeViewItem Header="item 6"></TreeViewItem>
<TreeViewItem Header="item 7"></TreeViewItem>
<TreeViewItem Header="item 8"></TreeViewItem>
<TreeViewItem Header="item 9"></TreeViewItem>
<TreeViewItem Header="item 10"></TreeViewItem>
<TreeViewItem Header="item 11"></TreeViewItem>
<TreeViewItem Header="item 12"></TreeViewItem>
</TreeViewItem>
</TreeView>
<TreeView x:Name="Tree2" Grid.Row="1" Margin="0,20,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Height="100">
<TreeViewItem Header="SecondHeader">
<TreeViewItem Header="item 1"></TreeViewItem>
<TreeViewItem Header="item 2"></TreeViewItem>
<TreeViewItem Header="item 3"></TreeViewItem>
<TreeViewItem Header="item 4"></TreeViewItem>
<TreeViewItem Header="item 5"></TreeViewItem>
<TreeViewItem Header="item 6"></TreeViewItem>
<TreeViewItem Header="item 7"></TreeViewItem>
<TreeViewItem Header="item 8"></TreeViewItem>
<TreeViewItem Header="item 9"></TreeViewItem>
<TreeViewItem Header="item 10"></TreeViewItem>
<TreeViewItem Header="item 11"></TreeViewItem>
<TreeViewItem Header="item 12"></TreeViewItem>
</TreeViewItem>
</TreeView>
</Grid>
TreeView控制器具有Scrollable属性,但要启用此属性,TreeView或其容器需要具有高度。
通过这种方式,您可以在同一个网格中看到两个TreeView,每个控制器都有自己的ScrollBar。