我试图使用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,我无论如何都可以满足我的所有要求。不过,我发现这是一个有趣的问题。
最佳答案
尝试以下方法:
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBox Name="input" />
<WrapPanel Grid.Row="2" HorizontalAlignment="Right" >
<TextBlock Text="*" Margin="0,0,3,0"/>
<TextBlock Text="{Binding ElementName=input, Path=Text}" TextWrapping="Wrap"/>
</WrapPanel>
</Grid>
FlowDirection用于支持从右到左阅读的语言。由于我不了解此类语言的规则,因此我不会假装理解为什么您看到自己的内容,或者它是否是错误。就是说,我知道更改FlowDirection并不是处理左右语言向右对齐的正确方法,而应该使用HorizontalAlignment。
(供将来参考,您可以通过Connect site向Microsoft提交错误)