我想做一个简单的列表框。每行应包含 2 个控件,一个左对齐,另一个右对齐,仅此而已:)
我尝试了多种方法但没有任何效果。我的代码如下
<StackPanel Grid.Row="1" Margin="12,0,12,0" Grid.Column="0">
<ListBox Name="ListBox" Margin="12,0,12,0" ItemsSource="Exercises" HorizontalContentAlignment="Stretch">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Width=">
<TextBlock Text="abc" HorizontalAlignment="Left" VerticalAlignment="Center"/>
<TextBlock Text="def" HorizontalAlignment="Right" VerticalAlignment="Center"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
(两个文本块仅供演示,在实际应用中,我想将一个文本块绑定到实际数据,而不是第二个滥用按钮。)
当我编译这个时,两个文本块都向左对齐,在模拟器中,它看起来像是一个带有文本“abcdef”的文本块。
知道如何将一个文本块向右对齐,另一个文本块向左对齐吗?
非常感谢 :)
默认情况下,ListBoxItem 不会填充给定的空间。它将自身和内容向左对齐。为了确保 ListBoxItem 的内容跨越整个宽度,您需要更改 ItemContainerStyle
<ListBox>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
现在内容将跨越可用宽度。如果您希望像示例中那样使用 StackPanel,请确保也设置它的 HorizontalAlignment。 StackPanel 也不会填充给定的可用空间
<DataTemplate>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch">
<TextBlock Text="abc" HorizontalAlignment="Left" VerticalAlignment="Center"/>
<TextBlock Text="def" HorizontalAlignment="Right" VerticalAlignment="Center"/>
</StackPanel>
</DataTemplate>
但是,我建议使用网格并定义两列
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Text="abc" HorizontalAlignment="Left" VerticalAlignment="Center"/>
<TextBlock Text="def" Grid.Column="1" HorizontalAlignment="Right" VerticalAlignment="Center"/>
</Grid>
</DataTemplate>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)