DockPanel.Dock ="Right"不适用于最大化窗口的单一控件?

Sha*_*ain 8 c# wpf wpf-controls

我正在使用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>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 用于多个控件的代码 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>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

期待输出:

在此输入图像描述

任何想法或想法将不胜感激.提前致谢

ion*_*den 20

你应该使用这个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>
Run Code Online (Sandbox Code Playgroud)


VS1*_*VS1 11

发生这种情况是因为该LastChildFill属性DockPanel是默认的true.要获得所需的输出,请将其设置为false.

按照MSDN:

如果将LastChildFill属性设置为true(默认设置),则DockPanel的最后一个子元素始终填充剩余空间,而不管您在最后一个子元素上设置的任何其他停靠值.要将子元素停靠在另一个方向上,必须将LastChildFill属性设置为false,并且还必须为最后一个子元素指定显式停靠方向.

使用DockPanel的示例UI和XAML:

<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>
Run Code Online (Sandbox Code Playgroud)

XAML样本

如果您不想要上述行为,请在上面的XAML示例中设置LastChildFill ="False"并观察结果.