我正在尝试使用网格分割器实现网格,我想让网格的上下行调整大小。网格的第一行由两部分组成:数据网格和包含其他元素的堆栈面板。堆栈面板应始终保持相同的大小,但数据网格应始终填充可用空间。 所有元素都被声明为垂直可伸缩的。
问题nr。 1:如果我将整个第一行放在堆栈面板中,数据网格会自动缩小到MinHeight,但我希望有一个预定义的默认高度,只有用户可以将第一行缩小到最小高度。换句话说,当程序被控制时,网格分割器处于其默认位置,并且上部的数据网格填充可用空间,即使其中没有内容。如果我定义“高度”参数,则在移动网格分割器时不会调整数据网格的大小。
问题nr。 2视图的下半部分(第三行)包含一个动态填充的文本框(类似于控制台窗口)。因为它是垂直可伸缩的,所以第三行开始向下拉伸,因为文本框被填充而不是保持相同的高度 - 用户通过向上和向下移动网格分割器来定义的高度。
有关如何解决这些问题的任何想法?
第一个问题解决方案:我通过使用DockPanel而不是StackPanel解决了第一个问题。我已经将数据网格设置为底层元素(一种权衡,它之前是上层,但它作为下层元素也很好)。我在第二行中使用了TabControl。但是,我在上排和下排有问题nr.2。无论用户在何处设置网格分割器,当动态添加内容时,元素都会扩展。即使添加了更多内容,如何使元素保持相同的高度(在这种情况下应该出现滚动条)?
这是我的新代码:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<DockPanel Grid.Row="0" Margin="10">
<!-- New Job setup-->
<StackPanel Height="40" Margin="0, 0, 0, 10" Orientation="Horizontal" DockPanel.Dock="Top">
<!-- a few labels and text boxes go here -->
</StackPanel>
<DataGrid DockPanel.Dock="Bottom" Margin="0" MinHeight="50"
VerticalScrollBarVisibility="Visible"
>
</DataGrid>
</DockPanel>
<GridSplitter HorizontalAlignment="Stretch" ResizeDirection="Rows" Height="5" Grid.Row="1"/>
<DockPanel Grid.Row="2" Margin="10">
<TabControl DockPanel.Dock="Bottom" ItemsSource="{Binding Tabs}" TabStripPlacement="Top"
ContentTemplateSelector= "{StaticResource selector}" SelectedItem="{Binding FocusedTab}">
<TabControl.ItemTemplate>
........
</TabControl.ItemTemplate>
</TabControl>
</DockPanel>