2009-08-25 15 views
12

数値をフォーマットするバリューコンバータがあります(残念ながらSP1は使用できません)。パーセンテージが得られるまでうまく動作します。 Double.ToStringはパーセント文字を見たときに番号が既に割合で、それは私の場合は100で数を乗算し、私にとっては残念ながらXAMLマークアップ拡張プロパティリテラルの一重引用符をエスケープするにはどうすればよいですか?

<TextBlock Text="{Binding Path=PercentageComplete, 
          Converter={StaticResource NumberFormatter}, 
          ConverterParameter='0.00 %'}" /> 

と変換は必要ありません:

は、ここでの例です。

C#では、これは単一引用符で%文字をエスケープすることにより達成されるであろうが:

(99.99).ToString("0.00 %") // gives -> "9999 %" 
(99.99).ToString("0.00 '%") // gives -> "99.99 %" 

残念ながら、私は上記のXAMLのマークアップ拡張機能でConverterParameterで単一引用符を使用することはできません。それをエスケープする方法はありますか?一重引用符を倍にしてバックスラッシュを使用しようとしましたが、どちらもコンパイルに失敗しました。

答えて

11

テストされていないが、あなたは試してみました:それは質問への直接の答えではないものの

<TextBlock Text="{Binding Path=PercentageComplete, 
         Converter={StaticResource NumberFormatter}, 
         ConverterParameter=&quot;0.00 '%&quot;}" /> 
+1

素晴らしい。魅力のように動作しますが、私はこの変種も好きですが、私はあなたの提案の後に試してみました: 'ConverterParameter = '0.00 "%''。どうもありがとう。 –

+0

また、私が言及した変種は、たとえそれがうまくコンパイルされても、VSが後続のコードを赤でマークすることはないことを指摘しておく価値があります。 –

+0

皮肉なことに私は似たようなことをしていましたが、他の方法でうまくいくと思っていましたので、それを変更しました:) –

2

をここでは、マークアップ拡張機能を回避し、回避策です。

<TextBlock> 
    <TextBlock.Text> 
    <Binding Path="PercentageComplete" 
      Converter="{StaticResource NumberFormatter}" 
      ConverterParameter="0.00 '%" /> 
    </TextBlock.Text> 
</TextBlock> 
3

あなたは特別な{}エスケープシーケンスを使用し、String.Formatの代わりに持つDouble.toString

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { 
    string format = (string) parameter; 

    return String.Format(format, value); 
} 

そして、あなたのバインディング式では使用することができます。

<TextBlock Text="{Binding PercentageComplete, Converter={StaticResource NumberFormatter}, ConverterParameter='{}{0:0.00} %'}"></TextBlock> 
9

以下が取られますhttp://msdn.microsoft.com/en-us/library/ee200269.aspxから。

任意の文字をバックスラッシュでエスケープできます。バックスラッシュは解析されず、スキップされます。したがって:

  • 'foo\'bar'foo'barになります。
  • "foo\"bar"foo"barとなります。
  • 'foo\\bar'foo\barになります。
  • 'foo\nbar'は、改行文字ではなくfoonbarになります。

ただし、マークアップの拡張解析は非常に奇妙です。 Visual Studio構文の強調表示ではサポートされていませんが、\{},=以外の文字は有効な値の文字です。これは、以下の構成が合法であることを意味します

  • {MyExtension Name=foo'bar}(引用符は文字列を引用符で囲む考慮すべき最初の文字でなければなりません。どこにもそのコピーした逐語的に)。
  • {MyExtension Name=f oo}(スペースも合法です;これはf ooになります);
  • {MyExtension Name= foo }(値の周囲のスペースはトリミングされています;これはfooになります)。
  • {MyExtension Name=foo\\bar}\の後の文字はそのままコピーされるので、foo\barになります)。
  • {MyExtension Name=foo \\ bar}(これはfoo \ barになります)。
  • {MyExtension Name=foo \} bar}(これはfoo } barになります)。 \ルールがここにも適用されることを

注:\以下のいずれかの文字はそのままコピーされます。

+2

これはテストしましたか?ここでは、\ 'をConverterParameterとして挿入する例を示します。 '\ t'は私に 't'を与え、 '\\ t'は私に '\\ t'を与えます。 – Mixxiphoid

+0

実際、上記のように結果を複製することはできません。 '' < - コンストラクタとプロパティの値は、 'foo \\ bar'と同じように記述されています。 –

関連する問題