0

私はWPFアプリケーションを持っています。

数字と単語を含むヘブライ語の文章を表示したい。

私はUnicodeのbidiについて読み、次のようにそのための小さなコードを書きます:

 const string PDF = "\u202C"; 
 const string LRO = "\u202D"; 
 const string RLO = "\u202E"; 
 const string TEXT = "ערך ראשון : ערך שני";

 var parts = TEXT.Split(':');
 double number = -50;
 double number2 = -200;
 string str = string.Empty;

 str +=RLO + parts[0] + PDF;
 str +=LRO + number + PDF;
 str +=RLO + parts[1] + PDF;
 str +=LRO + shortValue + PDF;
 Text = str;

今xamlで:

    <TextBlock Text="FlowDirection=LeftToRight TextAlignment=Right Language=he-IL" Grid.Column="0" Grid.Row="0" />
    <TextBlock Text="{Binding Text}" FlowDirection="LeftToRight" Language="he-IL" TextAlignment="Right" Grid.Column="1" Grid.Row="0"/>

    <TextBlock Text="FlowDirection=LeftToRight TextAlignment=Left Language=he-IL" Grid.Column="0" Grid.Row="1"/>
    <TextBlock Text="{Binding Text}" FlowDirection="LeftToRight"  Language="he-IL" TextAlignment="Left" Grid.Column="1" Grid.Row="1"/>

    <TextBlock Text="FlowDirection=RightToLeft TextAlignment=Left Language=he-IL" Grid.Column="0" Grid.Row="2"/>
    <TextBlock Text="{Binding Text}" FlowDirection="RightToLeft"  Language="he-IL" TextAlignment="Left" Grid.Column="1" Grid.Row="2"/>

    <TextBlock Text="FlowDirection=RightToLeft TextAlignment=Right Language=he-IL" Grid.Column="0" Grid.Row="3"/>
    <TextBlock Text="{Binding Text}" FlowDirection="RightToLeft"  Language="he-IL" TextAlignment="Right" Grid.Column="1" Grid.Row="3"/>

しかし、ここでわかるように、WPF ではサポートされていないようです。

ここに画像の説明を入力

負の数は適切に設計されていません..

編集:

リンクを提供してくれた Hans Passant に感謝します。

LRO と RLO の値を次のように変更します。

    const string LRO = "\u200E";
    const string RLO = "\u200F"; 

そして今、それは適切に設計されています。

ここに画像の説明を入力

ありがとう!

4

1 に答える 1

0

適切な文化で数字を印刷する必要があります。ここで、プログラムに文字列の書き方を正確に指示すると、指示どおりに実行されます。

特別な数値フォーマットが必要な場合は、Culture.

参照: http://msdn.microsoft.com/en-us/library/shxtf045%28v=vs.110%29.aspx

double value = -16325.62015;
// Display value using the invariant culture.
Console.WriteLine(value.ToString(CultureInfo.InvariantCulture));
// Display value using the en-GB culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("en-GB")));
// Display value using the de-DE culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("de-DE")));
于 2014-12-16T14:26:22.910 に答える