Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF中用户定义元素高度的网格拆分器的正确实现_C#_Wpf_Gridsplitter - Fatal编程技术网

C# WPF中用户定义元素高度的网格拆分器的正确实现

C# WPF中用户定义元素高度的网格拆分器的正确实现,c#,wpf,gridsplitter,C#,Wpf,Gridsplitter,我正在尝试使用网格拆分器实现一个网格,我想使网格的上下两行上下调整大小。网格的第一行由两部分组成:数据网格和包含更多元素的堆栈面板。堆栈面板应始终保持相同大小,但数据网格应始终填充可用空间。 所有元素都声明为可垂直拉伸 问题1:如果我将整个第一行放在堆栈窗格中,数据网格将自动收缩到最小高度,但我希望有一个预先定义的默认高度,并且只有用户可以将第一行收缩到其最小高度。换言之,当程序执行策略时,网格拆分器处于其默认位置,并且上部的数据网格填充可用空间,即使其中没有内容。如果我定义了“Height”参

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

问题1:如果我将整个第一行放在堆栈窗格中,数据网格将自动收缩到最小高度,但我希望有一个预先定义的默认高度,并且只有用户可以将第一行收缩到其最小高度。换言之,当程序执行策略时,网格拆分器处于其默认位置,并且上部的数据网格填充可用空间,即使其中没有内容。如果我定义了“Height”参数,则移动网格拆分器时数据网格的大小不会调整

问题2视图的下部(第三行)包含一个动态填充的文本框(类似于控制台窗口)。因为第三行可以垂直拉伸,所以当文本框填充时,第三行开始向下拉伸,而不是保持相同的高度-用户通过上下移动网格拆分器定义的高度

关于如何解决这些问题有什么想法吗

第一个问题解决方案:我使用DockPanel而不是StackPanel解决了第一个问题。我将数据网格设置为底部元素(这是一种折衷,它以前是上层元素,但也可以作为下层元素)。我对第二行的TabControl也做了同样的操作。但是,我在上一行和下一行中遇到了第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>

........

发布您尝试过的XAML。在这里,我希望帮助您不要在第三行发布文本块,因此无法在那里帮助您,但如果这会移动拆分器,那么您就有布局问题。尝试使用DataGrid的默认最小高度。处理拆分器DragEnter并仅在第一次更改最小高度。第三行实际上很复杂,因为TabControl有两个不同的模板:一个带有datagrid,另一个带有文本块。带有文本块的选项卡始终可见,但带有数据网格的选项卡可根据需要显示。这是文本框的模板代码: