我试图使用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并不是处理左右语言向右对齐的正确方法,而应该使用Horizo​​ntalAlignment。

(供将来参考,您可以通过Connect site向Microsoft提交错误)

07-24 09:49
查看更多