2

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 を使用するように構成すると、とにかくすべての要件を満たします。それでも、これは興味深い問題だと思いました。

4

2 に答える 2

4

代わりにこれを試してください:

<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 サイトから Microsoft にバグを送信します)

于 2010-07-20T15:16:19.043 に答える
3

.Net 4(WPF4)では、実行はバインド可能であるため、次のように試すことができます。

<TextBlock TextAlignment="Right" TextWrapping="Wrap">
    <Run Text="*" /><Run Text="{Binding ElementName=Input, Path=Text}" />
</TextBlock>

2つのRun要素は同じ行にあります。これは、タグ境界の間に任意のタイプの空白があると、2つのRunの間にスペースが表示されるためです。(HTMLのように。)

于 2010-07-20T17:04:21.780 に答える