我需要一个面板,其中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>
我确信这方面有一个简单的解决方案 - 也许是通过在其中一个项目中使用子通道 - 但我无法理解如何。任何帮助非常感谢。
答案 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>