31

または、より明確にするために、テキストの一部がバインドされた値から取得されるように、テキストのブロック(私の場合はツールチップに含まれる)をフォーマットするにはどうすればよいですか。

プレーンなC#では、次を使用します。

_toolTip.Text = string.Format("{1:#0}% up, {2:#0}% down",
    Environment.NewLine, percentageOne, percentage2);

ただし、TextプロパティのWPF XAMLマークアップには、単一のバインディングしか含めることができないようです。中括弧は私に高い希望を与えましたが、これは不可能です:

<Element>
  <Element.Tooltip>
    <!-- This won't compile -->
    <TextBlock Text="{Binding Path=PercentageOne}% up, {Binding Path=PercentageTwo}% down"/>
  </Element.Tooltip>
</Element>

Run.Textプロパティは依存関係プロパティではないため、バインドできないことを読みました。

XAMLでこのフォーマットを実行する方法はありますか?

4

5 に答える 5

45

MultiBinding + StringFormatを使用できます(WPF 3.5 SP1が必要です)。

<TextBox.Text>
    <MultiBinding StringFormat="{}{1:#0}% up, {2:#0}% down">
      <Binding Path="PercentageOne" />
      <Binding Path="PercentageTwo"/>
    </MultiBinding>
</TextBox.Text>

Run.Textについて-バインドすることはできませんが、いくつかの回避策があります。

于 2009-01-15T15:08:37.503 に答える
11

複数のテキストブロックに分割し、それぞれをバインディングで StringFormat={0:P} にバインドします。

<TextBox Text="{Binding Something, StringFormat=\{0:P\}}" />

例については、この投稿を参照してください: StringFormat に関する Lester の WPF ブログ

チェックアウト VS2010 - プロパティからのバインディングには、オプションの書式設定が含まれます。

于 2010-02-09T15:45:06.323 に答える
3

3.5 SP1 を使用している場合は、Aku の回答が最適です。そうでない場合は、WPF ConvertersライブラリのFormatConverterを使用できます。

于 2009-01-15T16:34:11.433 に答える
2

私の知る限り、WPFはあなたが望むことをしません。あなたははるかに強力な(より複雑ではありますが)解決策を持っています。

IValueConverterインターフェイスを見てください。

MSDNHowToリンクはこちら

編集

akuの回答と、3.5 SP1を使用できないというあなたの主張に基づいて、ここに代替案があります。

文字列のフォーマットに関するPhilHaackの最近の一連の投稿を見てください。

フォーマットをプロパティとして使用するValueConverterを作成します。これで、データオブジェクトをバインドし、定義した形式に基づいた形式にすることができます(位置の代わりにプロパティ名を使用)。

于 2009-01-15T15:08:15.493 に答える
2

過去に私がこれを解決した方法は、実際には、リストにある TextBlock をいくつかの TextBlock に分割することでした。次のようなことを試してください:

<Element>
  <Element.Tooltip>
    <StackPanel Orientation="Horizontal">
      <TextBlock Text="{Binding Path=PercentageOne}"/>
      <TextBlock Text="% up, "/>
      <TextBlock Text="{Binding Path=PercentageTwo}"/>
      <TextBlock Text="% down"/>
    </StackPanel>
  </Element.Tooltip>
</Element>

または、フォーマット文字列をパラメーターとして取り、MultiBinding を使用してパラメーターを渡すことができる StringFormatConverter のようなものを作成することもできます。MultiBinding については、次のリンクを参照してください。

マルチバインディング情報

そして、これはコンバーターに関する情報です:

コンバーター情報

最初のパラメーターとして「オブジェクト値」ではなく「オブジェクト [] 値」を取り、それらを Format 関数に渡すコンバーターを簡単に想像できます。

于 2009-01-15T15:14:04.840 に答える