2016-07-05 11 views
0

WPF TextBlockに\を印刷しようとしましたが、代わりに通貨記号が表示されました。私はこのシステムがCJKのWindowsであると考えていたので、カルチャーインフォメーションコードが追加されました。UIの通貨記号の代わりにバックスラッシュを表示

問題はまだ残っていて、アイディアが不足していたので、私はこのおいしい壊れた回避策を使用しました。

CultureInfo useng = new CultureInfo("en-US"); 
useng.NumberFormat.CurrencySymbol = "\\"; 
Thread.CurrentThread.CurrentCulture = useng; 
Thread.CurrentThread.CurrentUICulture = useng; 

これを修正する適切な方法があるかどうかは疑問でした。チャー注

Dispatcher.Invoke(new Action(() => { tb.Text = "" + listCharEnumerator.Current; }), System.Windows.Threading.DispatcherPriority.Render); 

Code in full available on github. Small project, really.

'\\' として宣言して

のTextBlockを更新するためのコードは、TimerオブジェクトにTextBlock.Textを使用して、リストからCHARオブジェクトを取り前述の回避策はこのブランチでは機能していません。

+0

テキストブロックと関連性の高いものをどのように埋め込むかを示してください。XAML –

+0

@ScottChamberlain done! XAMLで面白いことはありません。 Visual Studioで生成されたデフォルトのコードです。 – dare0021

+0

XAMLに何もしていないのであれば、それは通貨ではありません。 'listCharEnumerator.Current'が期待する値を保持していない可能性は非常に高いです。特に列挙子であり、ディスパッチャーで呼び出すということは、 'var temp = listCharEnumerator.Current; Dispatcher.Invoke(新しいアクション(()=> {{+}テロップ})、 'あなたは可変キャプチャの問題があります –

答えて

0

ディスパッチャーが実行されるのを待っている間に、問題の原因が変更されています。ディスパッチャーが実行するチャンスを得るまでに、\\から移動して、コレクション(おそらく通貨記号)。

これを解決する方法は、ディスパッチャーがディスパッチャー内でローカル変数を使用する前に、列挙子の値をローカル変数に渡すことです。

var temp = listCharEnumerator.Current; 
Dispatcher.Invoke(new Action(() => { tb.Text = "" + temp; }), System.Windows.Threading.DispatcherPriority.Render); 
+0

奇数ビットは通貨記号がコード内でまったく使われていないので、私はそれがそこにある唯一の方法だと信じさせてくれました。それは今のところ小さなプロジェクトです(〜300行、ただ1つのロジックファイル)ので、どこにも隠れているようではありません。多分。 – dare0021

+0

それはそこにあります、 'listCharEnumerator'の最後の値はデータソースですか?あなたはそれがないと確信していますか? –

+0

また、未加工の列挙子を使用することはまれですが、なぜあなたは 'foreach(yourCharDataSource {chars内のchar currentChar}) 'を使用していないのですか? –

関連する問題