Изменение размера родителя путем перемещения сплиттера

У меня есть вопрос об изменении размера.

Я знаю, что функция разделителя состоит в том, чтобы разделить некоторые элементы в форме без изменения размера родительского элемента. Разделитель разделяет 100% родительского размера, например, на 40% и 60%. Но в моем случае мне нужен разделитель или что-то в этом роде, который изменяет размер родительского элемента (UserControl), а не другого элемента (Panel).

Например, у меня есть 2 панели высотой 50 пикселей и 50 пикселей. Между ними есть сплиттер, который теперь изменяет размеры одной панели до 70px. Вторая панель должна сохранять 50px, а UserControl должен изменять размер до 120px.

Кроме того, в моем приложении UserControl добавляется на панель с autoscroll = true, чтобы показать вертикальную полосу прокрутки. У кого-нибудь есть идея это реализовать?

2 ответа

Вы можете попробовать закодировать какое-нибудь действие внутри события сплиттера, которое изменит размер вашего окна. Однако это противоречит интуитивно (не соответствует стандартному интерфейсу Windows), что размер окна изменится после действия изнутри. Попробуйте настроить определения строк сетки таким образом, чтобы при изменении размеров окна изменялся только верхний. например, ниже для столбцов. пример взят из рабочей реальной страницы, которая делает то, что вы просили (столбцы с правой стороны не сжимаются и не растягиваются при изменении размеров окон). Обратите внимание, что разделители в реальной странице 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 должна быть изменена
  • панель2, чтобы сохранить ее высоту без изменений

Я прав?

В этом случае вам не нужно использовать разделитель, но свойство Dock элемента управления:

  • Установить panel1.Dock собственность на DockStyle.Fill: панель1 займет все доступное пространство в UserControl
  • Установить panel2.Dock собственность на DockStyle.Bottom: панель2 сохранит свою первоначальную высоту, чтобы остаться в нижней части UserControl

Я надеюсь, что это помогает.

Другие вопросы по тегам