web-dev-qa-db-ja.com

wpf-文字列リテラルを使用してラベルにstringformatをバインドする

スライダーコントロールのツールチップをそのValueプロパティにバインドし、StringFormatを使用して「現在の値{0} of 10」を表示しようとしています。ここで、{0}はValueプロパティです。以下は、これを理解するために私が試したさまざまなことの1つです。

<Slider.ToolTip>
  <Label>
    <Label.Content>
      <Binding StringFormat="Current Value {0} of 10"
               ElementName="DebugLevelSlider"
               Path="Value" />
    </Label.Content>
  </Label>
</Slider.ToolTip>

上記のような文字列リテラルでstringformatを使用する方法の例をオンラインで見つけるのに問題があります。文字列形式の日付/時刻/通貨形式の変換がたくさんあります。私はこれをマルチバインディングで行う方法があると思いますが、必要以上に余分な作業のように思えます。文字列リテラルの書式設定では、まだカスタムコンバーターを記述する必要がないことを願っています。

私のアプリでは、アイテムの横に追加のラベルをたくさん使用しているので、stringformatを理解することで、不要なラベルの一部を削除できると思います。

23
TWood

ツールチップについては、チェックアウトできます StringFormatを使用したWPFバインディングは、ツールチップでは機能しません

上記で指定したStringFormatまでは、文字列をエスケープする必要があります。

StringFormat="{}Current Value {0} of 10"

以下はStringFormatの例です。 http://blogs.msdn.com/b/llobo/archive/2008/05/19/wpf-3-5-sp1-feature-stringformat.aspx

32
a_hardin

Label.Contentはオブジェクトであるため、バインディングのターゲットタイプはstringである必要があるため、そこではBinding.StringFormatを使用できません。

2つの回避策は次のとおりです。TextBlockの代わりにLabelを使用し、Textプロパティをバインドします。

Label.ContentStringFormat を使用します。

<Label ContentStringFormat="Current Value {0} of 10" Content={Binding ...} />

最初の文字が{}の場合は、string{でエスケープするだけです。

94