面板调整大小的行为

时间:2012-05-20 16:27:50

标签: wpf layout panel

我需要一个面板,其中3个项目水平排列,一个对齐左,一个右,最后居中在剩余空间。我可以用:

<DockPanel LastChildFill="True">
    <TextBlock DockPanel.Dock="Left" Text="TextLeft" FontSize="40" Foreground="DarkOrange"/>
    <TextBlock DockPanel.Dock="Right" Text="TextRight" FontSize="40" Foreground="DarkOrange"/>
    <TextBlock Text="TextMiddle" FontSize="40" HorizontalAlignment="Center"/>
</DockPanel>

enter image description here

但我希望当宽度小于项目宽度的总和时,它会被“TextRight”吃掉,而不是“TextMiddle”,如下所示:

enter image description here

注意我已尝试在TextMiddle上添加MinWidth - 但此不会更改行为 - 因为TextMiddle是LastChildFill =“True”DockPanel的最后一个子项。

下面的XAML让我在调整大小时正确的行为(当空间有限时,TextRight会被吃掉)但是在那里可用空间中“TextMiddle”不居中足够的宽度:

<DockPanel LastChildFill="False" >
    <TextBlock DockPanel.Dock="Left" Text="TextLeft" FontSize="40" Foreground="DarkOrange"/>
    <TextBlock DockPanel.Dock="Left" Text="TextMiddle" FontSize="40" HorizontalAlignment="Center" />
    <TextBlock DockPanel.Dock="Right" Text="TextRight" FontSize="40" Foreground="DarkOrange"/>
</DockPanel>

enter image description here enter image description here

我确信这方面有一个简单的解决方案 - 也许是通过在其中一个项目中使用子通道 - 但我无法理解如何。任何帮助非常感谢。

1 个答案:

答案 0 :(得分:1)

也许这就是它?

<Grid>
  <Grid.RowDefinitions>
    <RowDefinition />
  </Grid.RowDefinitions>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="2*" MinWidth="350"/>
    <ColumnDefinition Width="*"/>
  </Grid.ColumnDefinitions>
  <UniformGrid HorizontalAlignment="Stretch" Rows="1">  
       <TextBlock Name="TextLeft" Text="TextLeft" FontSize="40" Foreground="DarkOrange"/>  
       <TextBlock Name="TextMiddle" Text="TextMiddle" FontSize="40" HorizontalAlignment="Center" />  
  </UniformGrid>
  <TextBlock Grid.Column="1" HorizontalAlignment="Right" Text="TextRight" FontSize="40" Foreground="DarkOrange"/>  
</Grid>