13

StringFormat を使用して、TextBlock にバインドされている値の周りにアポストロフィ (アポストロフィ?) を挿入しようとしています:

<TextBlock Text="{Binding MyValue, StringFormat='The value is &apos;{0}&apos;'}"/>

ただし、コンパイル エラーが発生します。

MarkupExtension の名前と値に引用符を含めることはできません。MarkupExtension 引数 ' MyValue, StringFormat='The value is '{0}''}' は無効です。

ただし、引用符で機能することに気付きました:

<TextBlock Text="{Binding MyValue, StringFormat='The value is &quot;{0}&quot;'}"/>

これは StringFormat のバグですか?

4

4 に答える 4

19

バグかどうかはわかりませんが、この方法をテストしたところ、うまくいきました。

<TextBlock Text="{Binding MyValue, StringFormat='The value is \'{0}\''}" />

\従来の XML スタイルとは対照的に、StringFormat 内の一重引用符を使用してエスケープする必要があるようです&apos;

于 2011-10-31T06:10:32.060 に答える
10

\前に使用してみてください&apos:

<TextBlock Text="{Binding MyValue, StringFormat='The value is \&apos;{0}\&apos;'}"/>
于 2012-12-17T10:53:04.673 に答える
0

TimeSpan 値の StringFormatConverter ConverterParameter を作成する UWP でこの問題が発生しました。TimeSpan.ToString(x) カスタム フォーマット文字列では、DateTimeOffset ではなくても、なんらかの理由でリテラル文字の前後にアポストロフィが必要です。不必要に矛盾しているようです。

とにかく...上記のどれもうまくいきませんでした。1 つのアプローチは、XAML デザイナーを表示/動作させる限りは機能しましたが、ビルド エラーが発生しました。

私が解決した解決策は、フォーマット文字列を最も近い外側の要素の文字列リソースに入れることでした。Border を使用して作成されたボックスに値を表示していたので、書式文字列を Border 要素のリソースに詰め込みました。

StringFormatConverter は、NuGet の Microsoft UWP Toolkit のものです。

<StackPanel Orientation="Horizontal">
  <TextBlock Text="Timespan=" />
  <Border BorderBrush="Black" BorderThickness="0.5" Padding="2">
    <Border.Resources>
      <x:String x:Key="TimespanValueConverterParameter">{0:hh':'mm':'ss'.'fff}</x:String>
    </Border.Resources>
    <TextBlock Text="{Binding TimespanValue, Mode=OneWay, Converter={StaticResource StringFormatConverter}, ConverterParameter={StaticResource TimespanValueConverterParameter}}" />
  </Border>
</StackPanel>
于 2019-10-13T17:49:28.003 に答える