DockPanel.Dock = "Right" не работает для одного элемента управления в окне Maximized? - PullRequest
7 голосов
/ 07 марта 2012

Я использую DockPanel.Dock для стыковки элементов управления в определенном месте (то есть влево / вправо).Проблема в том, что мои элементы управления не закрепляются в соответствии с положением DockPanel.Dock.

Ниже приведен код для одного элемента управления с кодом DockPanel.Dock="Right"

    <DockPanel>

         <TextBlock
              Text            ="Left1"
              Margin          ="5"
              DockPanel.Dock  ="Left"
              Style           ="{StaticResource TextBlockStyle}"
              />

         <TextBlock
              Text            ="Left2"
              Margin          ="5"
              DockPanel.Dock  ="Left"
              Style           ="{StaticResource TextBlockStyle}"
              />

         <TextBlock
              Text            ="Right1"
              Margin          ="5"
              DockPanel.Dock  ="Right"
              Style           ="{StaticResource TextBlockStyle}"
              />

   </DockPanel>

enter image description here для нескольких элементов управления сDockPanel.Dock="Right"

    <DockPanel>

         <TextBlock
              Text            ="Left1"
              Margin          ="5"
              DockPanel.Dock  ="Left"
              Style           ="{StaticResource TextBlockStyle}"
              />

         <TextBlock
              Text            ="Left2"
              Margin          ="5"
              DockPanel.Dock  ="Left"
              Style           ="{StaticResource TextBlockStyle}"
              />

         <TextBlock
              Text            ="Right1"
              Margin          ="5"
              DockPanel.Dock  ="Right"
              Style           ="{StaticResource TextBlockStyle}"
              />

         <TextBlock
              Text            ="Right2"
              Margin          ="5"
              DockPanel.Dock  ="Right"
              Style           ="{StaticResource TextBlockStyle}"
              />

   </DockPanel>

enter image description here

Ожидаемый результат:

enter image description here

Любая идея или мысльбыть оцененнымЗаранее спасибо

Ответы [ 3 ]

18 голосов
/ 07 марта 2012

Вы должны использовать свойство LastChildFill:

<DockPanel LastChildFill="False">

    <TextBlock
      Text            ="Left1"
      Margin          ="5"
      DockPanel.Dock  ="Left"
      />

    <TextBlock
      Text            ="Left2"
      Margin          ="5"
      DockPanel.Dock  ="Left"
      />

    <StackPanel Orientation="Horizontal" DockPanel.Dock="Right">
        <TextBlock
      Text            ="Right1"
      Margin          ="5"
      />
    <TextBlock
      Text            ="Right2"
      Margin          ="5"
      />

  </StackPanel>


</DockPanel>
10 голосов
/ 07 марта 2012

Это происходит потому, что для LastChildFill свойства DockPanel по умолчанию установлено значение true.Для желаемого результата, установите его на false.

Согласно MSDN:

Если для свойства LastChildFill установлено значение true, то естьпо умолчанию последний дочерний элемент DockPanel всегда заполняет оставшееся пространство независимо от любого другого значения дока, которое вы установили в последнем дочернем элементе.Чтобы закрепить дочерний элемент в другом направлении, необходимо установить для свойства LastChildFill значение false, а также указать явное направление закрепления для последнего дочернего элемента.

Пример пользовательского интерфейса и XAML с использованием DockPanel:

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" WindowTitle="DockPanel Sample">
  <DockPanel LastChildFill="True">
    <Border Height="25" Background="SkyBlue" BorderBrush="Black" BorderThickness="1" DockPanel.Dock="Top">
      <TextBlock Foreground="Black">Dock = "Top"</TextBlock>
    </Border>
    <Border Height="25" Background="SkyBlue" BorderBrush="Black" BorderThickness="1" DockPanel.Dock="Top">
      <TextBlock Foreground="Black">Dock = "Top"</TextBlock>
    </Border>
    <Border Height="25" Background="LemonChiffon" BorderBrush="Black" BorderThickness="1" DockPanel.Dock="Bottom">
      <TextBlock Foreground="Black">Dock = "Bottom"</TextBlock>
    </Border>
    <Border Width="200" Background="PaleGreen" BorderBrush="Black" BorderThickness="1" DockPanel.Dock="Left">
      <TextBlock Foreground="Black">Dock = "Left"</TextBlock>
    </Border>
    <Border Background="White" BorderBrush="Black" BorderThickness="1">
      <TextBlock Foreground="Black">This content will "Fill" the remaining space</TextBlock>
    </Border>
  </DockPanel>
</Page>

XAML Sample

Если вы не хотите использовать вышеуказанное поведение, установите LastChildFill = "False" в приведенном выше примере XAML и просмотрите результат.

2 голосов
/ 07 марта 2012

Добавить HorizontalAlignment = "Right", как указано ниже

     <TextBlock
          Text            ="Left1"
          Margin          ="5"
          DockPanel.Dock  ="Left"
          Style           ="{StaticResource TextBlockStyle}"
          />

     <TextBlock
          Text            ="Left2"
          Margin          ="5"
          DockPanel.Dock  ="Left"
          Style           ="{StaticResource TextBlockStyle}"
          />

     <TextBlock
          Text            ="Right1"
          Margin          ="5"
          DockPanel.Dock  ="Right"
          HorizontalAlignment="Right"
          Style           ="{StaticResource TextBlockStyle}"
          />

     <TextBlock
          Text            ="Right2"
          Margin          ="5"
          DockPanel.Dock  ="Right"
          HorizontalAlignment="Right"
          Style           ="{StaticResource TextBlockStyle}"
          />

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...