3

对于相当复杂的 WPF 工具提示的一部分,我正在尝试使用 MultiBinding 来生成基于两个属性的格式化文本。问题是,绑定的 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>

最后一个示例中的绑定不接收任何值。这不是工具提示之外的情况 - 在这种特定情况下绑定失败的情况是什么?

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 回答