文本块中的水平调整不起作用
Posted
技术标签:
【中文标题】文本块中的水平调整不起作用【英文标题】:horizontalalingment in textblock don't work 【发布时间】:2014-07-01 13:39:56 【问题描述】:我在 xaml 中有这样的代码:
<ListBoxItem>
<StackPanel Orientation="Horizontal">
<TextBlock Text="DynamicResource Referee" Width="120" FontWeight="Bold" Margin="0 0 5 0" HorizontalAlignment="Right"></TextBlock>
<TextBlock Text="LOL" Margin="0 0 5 0"></TextBlock>
</StackPanel>
</ListBoxItem>
问题是第一个 textBlock 没有向右对齐,而是向左对齐。
有很多列表框项目,我想让第一列向右对齐,第二列向左对齐。在每个 stackPanel 中,第一个文本块的宽度为 120。ListBox 在网格列中,列宽设置为 Auto。
我该如何解决这个问题?
【问题讨论】:
【参考方案1】:默认情况下,堆叠面板从左到右堆叠项目(这可以通过设置 FlowDirection="RightToLeft" 进行更改)因此,如果堆叠面板跨越整个可用区域并不重要,第一个项目将始终停靠到左边,不管你怎么对齐。
<ListBoxItem>
<StackPanel Orientation="Horizontal" FlowDirection="RightToLeft" HorizontalAlignment="Right">
<TextBlock Text="DynamicResource Referee" Width="120" FontWeight="Bold" Margin="0 0 5 0"></TextBlock>
<TextBlock Text="LOL" Margin="0 0 5 0"></TextBlock>
</StackPanel>
</ListBoxItem>
但是,如果您希望一个文本块停靠在左侧,另一个停靠在右侧,那么您应该使用 DockPanel 或 Grid。
使用 DockPanel:
<ListBoxItem>
<DockPanel>
<TextBlock Text="DynamicResource Referee" Width="120" FontWeight="Bold" Margin="0 0 5 0" DockPanel.Dock="Right"></TextBlock>
<TextBlock Text="LOL" Margin="0 0 5 0" DockPanel.Dock="Left"></TextBlock>
</DockPanel>
</ListBoxItem>
使用网格:
<ListBoxItem>
<Grid>
<TextBlock Text="DynamicResource Referee" Width="120" FontWeight="Bold" Margin="0 0 5 0" HorizontalAlignment="Right"></TextBlock>
<TextBlock Text="LOL" Margin="0 0 5 0" HorizontalAlignment="Left"></TextBlock>
</Grid>
</ListBoxItem>
默认情况下,网格和停靠面板都将填充其父级分配给它们的空间。如果未指定宽度/高度,停靠面板的最后一个子项将填充剩余的可用空间。
【讨论】:
【参考方案2】:设置 TextAlignment 属性
<TextBlock Text="DynamicResource Referee" Width="120" FontWeight="Bold" Margin="0 0 5 0" TextAlignment="Right"></TextBlock>
【讨论】:
【参考方案3】:将 StackPanel 的属性“HorizontalAlignment”设置为“Stretch”。
【讨论】:
以上是关于文本块中的水平调整不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Binding 中的 WPF StringFormat 在后面的代码中不起作用