对于相当复杂的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>


MultiBindingStringFormat一起使用也是如此:



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


但是带有MultiBindingConverter不会:



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


最后一个示例中的绑定没有任何值。在工具提示之外不是这种情况-在这种情况下,绑定失败了吗?

最佳答案

尝试在绑定上设置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 "";
    [...]
}

关于wpf - 为什么带有Converter的MultiBinding在ToolTip中不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6273083/

10-10 14:05