通过移动拆分器来调整父级的大小

时间:2014-01-31 13:26:27

标签: c# winforms resize devexpress splitter

我有一个关于调整大小的问题。

我知道拆分器的功能是在不调整父级大小的情况下拆分表单中的某些元素。分离器将100%的父母分开。 40%和60%。但在我的情况下,我需要一个分离器或类似的东西,它调整父(UserControl)的大小,而不是其他元素(面板)。

例如,我有2个面板,高度为50px和50px。在它们之间有一个分离器,现在将一个面板调整到70px。第二个面板应保持50px,UserControl应调整为120px。

此外,在我的应用程序中,UserControl被添加到具有autoscroll = true的面板以显示垂直滚动条。有没有人有想法实现这一点?

enter image description here

2 个答案:

答案 0 :(得分:0)

您可以尝试在分割器事件中编写一些可以改变窗口大小的动作。然而,它是反直觉的(不遵循标准的窗口ui)窗口将在内部动作后调整大小。 考虑设置网格行定义,以便在调整窗口大小时只调整顶部的大小。例如列在下面。这个例子来自一个工作的真实页面,它可以完成您的要求(当调整窗口大小时,右侧的列不会被挤压或拉伸)。请注意,实际页面xaml中的分割器远远低于(在所有内容面板之后)。

        <Grid.ColumnDefinitions>
            <ColumnDefinition Name="ThirdCol0" Width="353"></ColumnDefinition>
            <ColumnDefinition Name="ThirdCol1" Width="*"></ColumnDefinition>
            <ColumnDefinition Name="ThirdCol2" Width="*" MaxWidth="100"></ColumnDefinition>
            <ColumnDefinition Name="ThirdCol3" Width="117" MaxWidth="267"></ColumnDefinition>
        </Grid.ColumnDefinitions>

        <!-- here there are different panels etc -->

        <GridSplitter x:Name="MidSplitter"    DragCompleted="MidSplitter_DragCompleted" SnapsToDevicePixels="True"  Grid.Row="0" Grid.Column="1" 
            Width="5" Opacity="0.2" VerticalAlignment="Stretch" HorizontalAlignment="Right"
             ShowsPreview="False"></GridSplitter>
        <GridSplitter x:Name="Col2Splitter"  DragCompleted="MidSplitter_DragCompleted"  Grid.Row="0" Grid.Column="2" 
            Width="5" Opacity="0.2" VerticalAlignment="Stretch" HorizontalAlignment="Right"
             ShowsPreview="False"></GridSplitter>
        <GridSplitter  DragCompleted="MidSplitter_DragCompleted" Grid.Row="0" Grid.Column="0"  
            Width="5"  Opacity="0.2" VerticalAlignment="Stretch" HorizontalAlignment="Right"
             ShowsPreview="False"></GridSplitter>

答案 1 :(得分:0)

当用户控件的大小发生变化时,您需要:

  • 要调整大小的面板1
  • 面板2保持高度不变

我是对的吗?

在这种情况下,您不需要使用拆分器,而是使用Controls的Dock属性:

  • panel1.Dock属性设置为DockStyle.Fill:panel1将占用UserControl中的所有可用空间
  • panel2.Dock属性设置为DockStyle.Bottom:panel2将保持其初始高度以保持在UserControl的底部

我希望它有所帮助。