WPF中用户自定义元素高度的网格分割器的正确实现

时间:2014-05-06 10:53:19

标签: c# wpf gridsplitter

我正在尝试使用网格分割器实现网格,我想让网格的上下行调整大小。网格的第一行由两部分组成:数据网格和包含其他元素的堆栈面板。堆栈面板应始终保持相同的大小,但数据网格应始终填充可用空间。 所有元素都被声明为垂直可伸缩的。

问题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>

0 个答案:

没有答案