3

かなり複雑な WPF ToolTip の一部として、MultiBinding を使用して、2 つのプロパティに基づいて書式設定されたテキストを生成しようとしています。問題は、バインディングの MultiConverterが配列DependencyProperty.UnsetValue内の各項目を受け取ることです。values

以下は、単一の を使用して機能しますBinding

<ToolTipService.ToolTip>
  <StackPanel>
    <TextBlock>
      <TextBlock.Text>
        <Binding Path="Amt" Converter="{StaticResource singleValueConverter}"/>
      </TextBlock.Text>
    </TextBlock>        
  </StackPanel>
</ToolTipService.ToolTip>

MultiBindingwithを使用すると、次のようになりStringFormatます。

<ToolTipService.ToolTip>
  <StackPanel>
    <TextBlock>
      <TextBlock.Text>
        <MultiBinding StringFormat='{0:C} in {1}'>
          <Binding Path="Amt"/>
          <Binding Path="Currency"/>
        </MultiBinding>
      </TextBlock.Text>
    </TextBlock>        
  </StackPanel>
</ToolTipService.ToolTip>

しかし、 aMultiBindingと aConverterは違います:

<ToolTipService.ToolTip>
  <StackPanel>
    <TextBlock>
      <TextBlock.Text>
        <MultiBinding Converter="{StaticResource multiValueConverter}">
          <Binding Path="Amt"/>
          <Binding Path="Currency"/>
        </MultiBinding>
      </TextBlock.Text>
    </TextBlock>        
  </StackPanel>
</ToolTipService.ToolTip>

最後の例のバインディングは値を受け取りません。これは ToolTip 以外では当てはまりません。この特定のケースでバインドが失敗するのはなぜですか?

4

2 に答える 2

2

バインディングで Mode="OneWay" を設定してみてください。

また、この問題と解決策を確認しましたか: http://social.msdn.microsoft.com/Forums/en-IE/wpf/thread/15ada9c7-f781-42c5-be43-d07eb1f90ed4

このエラーの理由は、ツールチップが読み込まれていないためです。そのため、DependencyProperty.GetValue は DependencyProperty.UnsetValue を返します。値が Dependency.UnsetValue であることをテストするコードを追加する必要があります。次のコードは、これを行う方法を示しています。

public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
    if (values[0] == DependencyProperty.UnsetValue || values[1] == DependencyProperty.UnsetValue) 
        return "";
    [...]
}
于 2011-06-08T05:25:27.373 に答える
0

これを試して:

<ToolTipService.ToolTip>
    <StackPanel>
        <TextBlock>
            <TextBlock.Text>
                <MultiBinding Converter="{StaticResource multiValueConverter}">
                    <MultiBinding.Bindings>
                        <BindingCollection>
                            <Binding Path="Amt"/>
                            <Binding Path="Currency"/>
                        </BindingCollection>
                    </MultiBinding.Bindings>
                </MultiBinding>
            </TextBlock.Text>
        </TextBlock>        
    </StackPanel>
</ToolTipService.ToolTip>
于 2013-09-04T15:54:38.317 に答える