14

数値をフォーマットする値コンバーターがあります (残念ながら SP1 はまだ使用できません)。パーセンテージになるまではうまくいきます。

次に例を示します。

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

残念ながらDouble.ToString、パーセンテージ文字が表示されると、数値が 100 倍されます。私の場合、数値は既にパーセンテージであり、変換は必要ありません。

%C# では、これは単一引用符で文字をエスケープすることで実現できます。

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

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

4

4 に答える 4

13

テストされていませんが、試したことはありますか?

<TextBlock Text="{Binding Path=PercentageComplete,
                      Converter={StaticResource NumberFormatter},
                      ConverterParameter=&quot;0.00 '%&quot;}" />
于 2009-08-25T20:34:40.140 に答える
10

以下は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}(a の後の文字\は逐語的にコピーされるため、これは になりますfoo\bar);
  • {MyExtension Name=foo \\ bar}(これは になりますfoo \ bar);
  • {MyExtension Name=foo \} bar}(そしてこれは になりますfoo } bar)。

\ここでもルールが適用されることに注意してください。a に続く文字は、\そのままコピーされます。

于 2012-01-10T14:10:01.120 に答える
3

Double.ToString の代わりに String.Format を使用できます

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>
于 2009-08-25T20:41:39.597 に答える
2

質問に対する直接の答えではありませんが、マークアップ拡張を回避する回避策を次に示します。

<TextBlock>
  <TextBlock.Text>
    <Binding Path="PercentageComplete"
             Converter="{StaticResource NumberFormatter}"
             ConverterParameter="0.00 '%" />
  </TextBlock.Text>
</TextBlock>
于 2009-08-25T20:36:43.587 に答える