WrapPanel と 2 つの TextBlocks を使用して、テキストの左側にアスタリスク (*) を追加し、テキストの折り返しを許可し、テキストを強制的に右揃えにしようとしています。FlowDirection を RightToLeft に設定して WrapPanel を作成し、テキストの後にアスタリスクを追加することで、成功しました。ただし、使用するテキストの行末に英数字以外の文字が含まれていると、不可解にも行の先頭に強制されます。この振る舞いは非常に奇妙だと思います。これは WPF のバグであり、意図した動作ではないと思います。
Text = Normal Text (Other Text) の例:
Expected:
* Normal Text (Other
Text)
Actual:
* Normal Text (Other
(Text
次のサンプル コードを使用して、問題を再現してください。高さと幅が 100 のウィンドウにこれを配置し、TextBox に「通常のテキスト (その他のテキスト)」と入力します。または、高さと幅を好きなように設定し、テキストを折り返すのに十分なテキストを書き、最後に句読点を追加します。
サンプルコード:
<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 に提出する必要がありますか? どのように?
この投稿を開始して以来、代わりに 2 つの TextBlocks を 2 列のグリッドに配置することにしました。アスタリスクを含まない TextBlock を Right TextAlignment を使用するように構成すると、とにかくすべての要件を満たします。それでも、これは興味深い問題だと思いました。