AvalonDock: Как автоматически изменить размер элемента управления? - PullRequest
0 голосов
/ 12 февраля 2019

Кажется, я не могу автоматически изменить размер элемента управления AvalonDock при изменении размера его главного окна.(Кроме того, элемент управления должен пристыковаться к полному окну при запуске, что также ускользает от меня.)

Я пробовал свойства HorizontalAlignment и VerticalAlignment, как рекомендовано здесь и несколько других мест здесь на SO, но они не работают для этого контроля.Изменение размера элемента управления не происходит при изменении размера окна.

Исходя из этого, свойства определяют изменение размера элемента управления для его дочерних элементов управления.Однако мне нужно изменить размер элемента управления с его parent (окно).

Вот мой XAML, скопированный из образца Xceed и слегка измененный для работы в моей среде:

<Window 
  x:Class="Docker"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
  xmlns:xcad="http://schemas.xceed.com/wpf/xaml/avalondock"
  xmlns:s="clr-namespace:System;assembly=mscorlib"
  Title="AvalonDock">

  <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
    <Grid.RowDefinitions>
      <RowDefinition Height="Auto" />
      <RowDefinition Height="*" />
    </Grid.RowDefinitions>

    <TextBlock Grid.Row="0"
               Text="Usage:"
               Style="{StaticResource Header}" />

    <StackPanel Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
      <xcad:DockingManager x:Name="_dockingManager"
                           HorizontalAlignment="Stretch"
                           VerticalAlignment="Stretch"
                           AllowMixedOrientation="True"
                           BorderBrush="Gray"
                           BorderThickness="1">
        <xcad:DockingManager.DocumentHeaderTemplate>
          <DataTemplate>
            <StackPanel Orientation="Horizontal">
              <Image Source="{Binding IconSource}"
                     Margin="0,0,4,0" />
              <TextBlock Text="{Binding Title}" />
            </StackPanel>
          </DataTemplate>
        </xcad:DockingManager.DocumentHeaderTemplate>
        <xcad:LayoutRoot x:Name="_layoutRoot">
          <xcad:LayoutPanel Orientation="Horizontal">
            <xcad:LayoutAnchorablePane DockWidth="200">
              <xcad:LayoutAnchorable ContentId="properties"
                                     Title="Properties"
                                     CanHide="False"
                                     CanClose="False"
                                     AutoHideWidth="240"
                                     IconSource="..\Images\table-gear.png">
                <xctk:PropertyGrid NameColumnWidth="110"
                                   SelectedObject="{Binding ElementName=_layoutRoot, Path=LastFocusedDocument.Content}"
                                   AutoGenerateProperties="False">
                  <xctk:PropertyGrid.PropertyDefinitions>
                    <xctk:PropertyDefinition TargetProperties="Background" />
                    <xctk:PropertyDefinition TargetProperties="BorderBrush" />
                    <xctk:PropertyDefinition TargetProperties="BorderThickness" />
                    <xctk:PropertyDefinition TargetProperties="FontSize" />
                    <xctk:PropertyDefinition TargetProperties="FontStyle" />
                    <xctk:PropertyDefinition TargetProperties="Width" />
                    <xctk:PropertyDefinition TargetProperties="Height" />
                  </xctk:PropertyGrid.PropertyDefinitions>
                </xctk:PropertyGrid>
              </xcad:LayoutAnchorable>
            </xcad:LayoutAnchorablePane>
            <xcad:LayoutDocumentPaneGroup>
              <xcad:LayoutDocumentPane>
                <xcad:LayoutDocument ContentId="document1"
                                     Title="Document 1"
                                     IconSource="..\Images\document.png">
                  <Button Content="Document 1 Content"
                          HorizontalAlignment="Center"
                          VerticalAlignment="Center" />
                </xcad:LayoutDocument>
                <xcad:LayoutDocument ContentId="document2"
                                     Title="Document 2"
                                     IconSource="..\Images\document.png">
                  <TextBox Text="Document 2 Content"
                           AcceptsReturn="True" />
                </xcad:LayoutDocument>
              </xcad:LayoutDocumentPane>
            </xcad:LayoutDocumentPaneGroup >
            <xcad:LayoutAnchorablePaneGroup DockWidth="125">
              <xcad:LayoutAnchorablePane>
                <xcad:LayoutAnchorable ContentId="alarms"
                                       Title="Alarms"
                                       IconSource="..\Images\alarm.png"
                                       CanClose="True">
                  <ListBox>
                    <s:String>Alarm 1</s:String>
                    <s:String>Alarm 2</s:String>
                    <s:String>Alarm 3</s:String>
                  </ListBox>
                </xcad:LayoutAnchorable>
                <xcad:LayoutAnchorable ContentId="journal"
                                       Title="Journal">
                  <RichTextBox>
                    <FlowDocument>
                      <Paragraph FontSize="14"
                                 FontFamily="Segoe">
                        This is the content of the Journal Pane.
                        <LineBreak />
                        A
                        <Bold>RichTextBox</Bold> has been added here
                      </Paragraph>
                    </FlowDocument>
                  </RichTextBox>
                </xcad:LayoutAnchorable>
              </xcad:LayoutAnchorablePane>
            </xcad:LayoutAnchorablePaneGroup>
          </xcad:LayoutPanel>

          <xcad:LayoutRoot.LeftSide>
            <xcad:LayoutAnchorSide>
              <xcad:LayoutAnchorGroup>
                <xcad:LayoutAnchorable Title="Agenda"
                                       ContentId="agenda"
                                       IconSource="..\Images\book_open.png">
                  <TextBlock Text="Agenda Content"
                             Margin="10"
                             FontSize="18"
                             FontWeight="Black"
                             TextWrapping="Wrap" />
                </xcad:LayoutAnchorable>
                <xcad:LayoutAnchorable Title="Contacts"
                                       ContentId="contacts"
                                       IconSource="..\Images\address_book-edit.png">
                  <TextBlock Text="Contacts Content"
                             Margin="10"
                             FontSize="18"
                             FontWeight="Black"
                             TextWrapping="Wrap" />
                </xcad:LayoutAnchorable>
              </xcad:LayoutAnchorGroup>
            </xcad:LayoutAnchorSide>
          </xcad:LayoutRoot.LeftSide>
        </xcad:LayoutRoot>
      </xcad:DockingManager>

      <StackPanel Orientation="Horizontal"
                  HorizontalAlignment="Center">
        <Button Content="Save AvalonDock"
                Margin="5"
                Padding="5"
                Click="SaveButton_Click" />
        <Button Content="Load AvalonDock"
                Margin="5"
                Padding="5"
                Click="LoadButton_Click" />
      </StackPanel>
    </StackPanel>
  </Grid>
</Window>

enter image description here

1 Ответ

0 голосов
/ 12 февраля 2019

Избавьтесь от StackPanel во втором ряду Grid.StackPanel не изменяет размер своих детей.

Также обратите внимание, что значения по умолчанию HorizontalAlignment и VerticalAlignment Grid равны Stretch, поэтому вам не нужно устанавливать их явно.

Попробуйте это:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>

    <TextBlock Grid.Row="0" Text="Usage:" Style="{StaticResource Header}" />

    <xcad:DockingManager x:Name="_dockingManager"
                           HorizontalAlignment="Stretch"
                           VerticalAlignment="Stretch"
                           AllowMixedOrientation="True"
                           Grid.Row="1"
                           BorderBrush="Gray"
                           BorderThickness="1">
        <xcad:DockingManager.DocumentHeaderTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <Image Source="{Binding IconSource}"
                     Margin="0,0,4,0" />
                    <TextBlock Text="{Binding Title}" />
                </StackPanel>
            </DataTemplate>
        </xcad:DockingManager.DocumentHeaderTemplate>
        <xcad:LayoutRoot x:Name="_layoutRoot">
            <xcad:LayoutPanel Orientation="Horizontal">
                <xcad:LayoutAnchorablePane DockWidth="200">
                    <xcad:LayoutAnchorable ContentId="properties"
                                     Title="Properties"
                                     CanHide="False"
                                     CanClose="False"
                                     AutoHideWidth="240"
                                     IconSource="..\Images\table-gear.png">
                        <xctk:PropertyGrid NameColumnWidth="110"
                                   SelectedObject="{Binding ElementName=_layoutRoot, Path=LastFocusedDocument.Content}"
                                   AutoGenerateProperties="False">
                            <xctk:PropertyGrid.PropertyDefinitions>
                                <xctk:PropertyDefinition TargetProperties="Background" />
                                <xctk:PropertyDefinition TargetProperties="BorderBrush" />
                                <xctk:PropertyDefinition TargetProperties="BorderThickness" />
                                <xctk:PropertyDefinition TargetProperties="FontSize" />
                                <xctk:PropertyDefinition TargetProperties="FontStyle" />
                                <xctk:PropertyDefinition TargetProperties="Width" />
                                <xctk:PropertyDefinition TargetProperties="Height" />
                            </xctk:PropertyGrid.PropertyDefinitions>
                        </xctk:PropertyGrid>
                    </xcad:LayoutAnchorable>
                </xcad:LayoutAnchorablePane>
                <xcad:LayoutDocumentPaneGroup>
                    <xcad:LayoutDocumentPane>
                        <xcad:LayoutDocument ContentId="document1"
                                     Title="Document 1"
                                     IconSource="..\Images\document.png">
                            <Button Content="Document 1 Content"
                          HorizontalAlignment="Center"
                          VerticalAlignment="Center" />
                        </xcad:LayoutDocument>
                        <xcad:LayoutDocument ContentId="document2"
                                     Title="Document 2"
                                     IconSource="..\Images\document.png">
                            <TextBox Text="Document 2 Content"
                           AcceptsReturn="True" />
                        </xcad:LayoutDocument>
                    </xcad:LayoutDocumentPane>
                </xcad:LayoutDocumentPaneGroup >
                <xcad:LayoutAnchorablePaneGroup DockWidth="125">
                    <xcad:LayoutAnchorablePane>
                        <xcad:LayoutAnchorable ContentId="alarms"
                                       Title="Alarms"
                                       IconSource="..\Images\alarm.png"
                                       CanClose="True">
                            <ListBox>
                                <s:String>Alarm 1</s:String>
                                <s:String>Alarm 2</s:String>
                                <s:String>Alarm 3</s:String>
                            </ListBox>
                        </xcad:LayoutAnchorable>
                        <xcad:LayoutAnchorable ContentId="journal"
                                       Title="Journal">
                            <RichTextBox>
                                <FlowDocument>
                                    <Paragraph FontSize="14"
                                 FontFamily="Segoe">
                                        This is the content of the Journal Pane.
                                        <LineBreak />
                                        A
                                        <Bold>RichTextBox</Bold> has been added here
                                    </Paragraph>
                                </FlowDocument>
                            </RichTextBox>
                        </xcad:LayoutAnchorable>
                    </xcad:LayoutAnchorablePane>
                </xcad:LayoutAnchorablePaneGroup>
            </xcad:LayoutPanel>

            <xcad:LayoutRoot.LeftSide>
                <xcad:LayoutAnchorSide>
                    <xcad:LayoutAnchorGroup>
                        <xcad:LayoutAnchorable Title="Agenda"
                                       ContentId="agenda"
                                       IconSource="..\Images\book_open.png">
                            <TextBlock Text="Agenda Content"
                             Margin="10"
                             FontSize="18"
                             FontWeight="Black"
                             TextWrapping="Wrap" />
                        </xcad:LayoutAnchorable>
                        <xcad:LayoutAnchorable Title="Contacts"
                                       ContentId="contacts"
                                       IconSource="..\Images\address_book-edit.png">
                            <TextBlock Text="Contacts Content"
                             Margin="10"
                             FontSize="18"
                             FontWeight="Black"
                             TextWrapping="Wrap" />
                        </xcad:LayoutAnchorable>
                    </xcad:LayoutAnchorGroup>
                </xcad:LayoutAnchorSide>
            </xcad:LayoutRoot.LeftSide>
        </xcad:LayoutRoot>
    </xcad:DockingManager>

    <StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Center">
        <Button Content="Save AvalonDock"
                Margin="5"
                Padding="5"
                Click="SaveButton_Click" />
        <Button Content="Load AvalonDock"
                Margin="5"
                Padding="5"
                Click="LoadButton_Click" />
    </StackPanel>
</Grid>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...