2

我需要一个面板,其中有 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>

在此处输入图像描述

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

在此处输入图像描述

注意我尝试在 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>

在此处输入图像描述 在此处输入图像描述

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

4

1 回答 1

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>   
于 2012-05-20T16:45:43.570 回答