我正在尝试使用 WrapPanel 和两个 TextBlocks 将星号 (*) 附加到某些文本的左侧,允许文本换行,并强制文本右对齐。通过创建一个将 FlowDirection 设置为 RightToLeft 的 WrapPanel 并添加我的文本,然后是星号,我已经成功地做到了这一点。但是,如果我使用的文本恰好在行尾有任何非字母数字字符,它就会莫名其妙地被强制排在行首。我觉得这种行为很奇怪。我认为这一定是 WPF 中的错误,而不是预期的行为。
文本示例 = 普通文本(其他文本):
Expected:
* Normal Text (Other
Text)
Actual:
* Normal Text (Other
(Text
随意使用以下示例代码为自己重新创建问题。只需将它放在一个高度和宽度 = 100 的窗口中,然后在文本框中键入“普通文本(其他文本)”。或者,将高度和宽度设置为您喜欢的任何内容并编写足够的文本以强制换行,然后在末尾添加标点符号。
示例代码:
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBox Name="input" />
<WrapPanel Grid.Row="2" FlowDirection="RightToLeft">
<TextBlock Text="{Binding ElementName=input, Path=Text}" TextWrapping="Wrap"/>
<TextBlock Text="*" Margin="0,0,3,0"/>
</WrapPanel>
</Grid>
所以,我的问题。
- 这是一个错误,还是有意为之?
- 如果这是一个错误,我应该以某种方式将其提交给 Microsoft 吗?如何?
自从开始这篇文章以来,我决定将两个 TextBlocks 放在一个两列网格中。使用包含 TextBlock 的非星号配置为使用 Right TextAlignment 无论如何我都满足了我的所有要求。不过,我发现这是一个有趣的问题。