WPF自定义控件的ToolTip MultiBinding问题

时间:2011-03-20 21:16:43

标签: c# wpf silverlight custom-controls tooltip

当我在WPF自定义控件中设置工具提示绑定时,这种方式非常完美:

public override void OnApplyTemplate()
{
    base.OnApplyTemplate();
   ...
    SetBinding(ToolTipProperty, new Binding
                        {
                            Source = this,
                            Path = new PropertyPath("Property1"),
                            StringFormat = "ValueOfProp1: {0}"
                        });          
}

但是当我尝试使用MultiBinding在ToolTip中有多个属性时,它不起作用:

public override void OnApplyTemplate()
{
    base.OnApplyTemplate();
   ...
    MultiBinding multiBinding = new MultiBinding();
    multiBinding.StringFormat = "ValueOfProp1: {0}\nValueOfProp2: {1}\nValueOfProp3: {2}\n";

        multiBinding.Bindings.Add(new Binding
        {
            Source = this,
            Path = new PropertyPath("Property1")
        });
        multiBinding.Bindings.Add(new Binding
        {
            Source = this,
            Path = new PropertyPath("Property2")
        });
        multiBinding.Bindings.Add(new Binding
        {
            Source = this,
            Path = new PropertyPath("Property3")
        });

        this.SetBinding(ToolTipProperty, multiBinding);          
}  

在这种情况下,我根本没有显示工具提示。

我哪里错了?

1 个答案:

答案 0 :(得分:3)

事实证明,StringFormat上的MultiBinding仅适用于string类型的属性,而ToolTip属性属于object类型。在这种情况下,MultiBinding需要定义一个值转换器。

作为一种变通方法,您可以将TextBlock设置为ToolTip并使用Text绑定其MultiBinding属性(因为Text的类型为{{1}它将与string)一起使用:

StringFormat