Xaml - 文本块对齐
Xaml - Textblock Alignment
我正在尝试创建一个 ListViewItemTemplate,我的模板需要并排放置两个文本块。左边的是消息文本块,应该留在左边,右边的是日期文本块。该文本块需要延伸到 ItemTemplate 的末尾并且需要适合所有文本。我正在努力实现这一目标:
但这就是我得到的:
XAML 代码是:
<DataTemplate x:Key="ItemTemplate">
<Grid Height="84">
<StackPanel Holding="ListViewItem_Holding">
<TextBlock Text="{Binding Title}" FontFamily="Segoe WP" FontSize="21" />
<StackPanel Margin="0,0,-3,0" Orientation="Horizontal">
<TextBlock Text="{Binding Post}" FontFamily="Segoe WP SemiLight" FontSize="18" Margin="0,0,-1,0" Height="26" />
<TextBlock Text="{Binding Modified}" FontFamily="Segoe WP SemiLight" FontSize="18" Margin="0,0,-3,0" SelectionChanged="TextBlock_SelectionChanged" />
</StackPanel>
<TextBlock Text="{Binding ID}" FontFamily="Segoe WP SemiLight" FontSize="18" Visibility="Collapsed" />
</StackPanel>
</Grid>
</DataTemplate>
我该如何解决这个问题?我需要它,以便它可以正确拉伸并同时适合所有文本,无论方向如何。
我个人会使用 Grid,因为它比 StackPanel 灵活得多,并且可以更好地处理不同的屏幕尺寸。类似下面
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Text="Cant send: message" FontFamily="Segoe WP SemiLight"
FontSize="18" Margin="0,0,-1,0"
TextWrapping="Wrap"/>
<TextBlock Text="1:14a" Grid.Column="1" FontFamily="Segoe WP SemiLight"
TextWrapping="Wrap" FontSize="18"
HorizontalAlignment="Right"
SelectionChanged="TextBlock_SelectionChanged"
Margin="0,-15,0,0"/>
</Grid>
注意 2 列定义为等宽。您可以根据需要进行调整。
此外,两个 TextBlock 都有
TextWrapping="Wrap"
这意味着您的文本将变为可用 space(列宽),如果 space 可用,则换行到下一行。
第二个 TextBlock 右对齐,因此请适当调整边距。
HorizontalAlignment="Right"
您可以使用 Grid.RowDefinitions 和 Grid.ColumnDefinitions 来实现。
根据您的图片,您有两列和一行的数据。
因此,您可以在两列和一行上调整屏幕大小。您不需要使用堆栈面板来实现此目的。
<Grid Height="84">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="User" TextWrapping="Wrap" FontFamily="Segoe WP" FontSize="21" Grid.Column="0"/>
<TextBlock Text="1:41a" FontFamily="Segoe WP SemiLight" FontSize="18" Grid.Column="1" HorizontalAlignment="Right"/>
</Grid>
我正在尝试创建一个 ListViewItemTemplate,我的模板需要并排放置两个文本块。左边的是消息文本块,应该留在左边,右边的是日期文本块。该文本块需要延伸到 ItemTemplate 的末尾并且需要适合所有文本。我正在努力实现这一目标:
但这就是我得到的:
XAML 代码是:
<DataTemplate x:Key="ItemTemplate">
<Grid Height="84">
<StackPanel Holding="ListViewItem_Holding">
<TextBlock Text="{Binding Title}" FontFamily="Segoe WP" FontSize="21" />
<StackPanel Margin="0,0,-3,0" Orientation="Horizontal">
<TextBlock Text="{Binding Post}" FontFamily="Segoe WP SemiLight" FontSize="18" Margin="0,0,-1,0" Height="26" />
<TextBlock Text="{Binding Modified}" FontFamily="Segoe WP SemiLight" FontSize="18" Margin="0,0,-3,0" SelectionChanged="TextBlock_SelectionChanged" />
</StackPanel>
<TextBlock Text="{Binding ID}" FontFamily="Segoe WP SemiLight" FontSize="18" Visibility="Collapsed" />
</StackPanel>
</Grid>
</DataTemplate>
我该如何解决这个问题?我需要它,以便它可以正确拉伸并同时适合所有文本,无论方向如何。
我个人会使用 Grid,因为它比 StackPanel 灵活得多,并且可以更好地处理不同的屏幕尺寸。类似下面
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Text="Cant send: message" FontFamily="Segoe WP SemiLight"
FontSize="18" Margin="0,0,-1,0"
TextWrapping="Wrap"/>
<TextBlock Text="1:14a" Grid.Column="1" FontFamily="Segoe WP SemiLight"
TextWrapping="Wrap" FontSize="18"
HorizontalAlignment="Right"
SelectionChanged="TextBlock_SelectionChanged"
Margin="0,-15,0,0"/>
</Grid>
注意 2 列定义为等宽。您可以根据需要进行调整。 此外,两个 TextBlock 都有
TextWrapping="Wrap"
这意味着您的文本将变为可用 space(列宽),如果 space 可用,则换行到下一行。
第二个 TextBlock 右对齐,因此请适当调整边距。
HorizontalAlignment="Right"
您可以使用 Grid.RowDefinitions 和 Grid.ColumnDefinitions 来实现。 根据您的图片,您有两列和一行的数据。 因此,您可以在两列和一行上调整屏幕大小。您不需要使用堆栈面板来实现此目的。
<Grid Height="84">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="User" TextWrapping="Wrap" FontFamily="Segoe WP" FontSize="21" Grid.Column="0"/>
<TextBlock Text="1:41a" FontFamily="Segoe WP SemiLight" FontSize="18" Grid.Column="1" HorizontalAlignment="Right"/>
</Grid>