Проблема со всплывающей подсказкой в ​​пользовательском элементе управления WPF - PullRequest
2 голосов
/ 21 марта 2011

Когда я устанавливаю привязку всплывающей подсказки в пользовательском элементе управления WPF, она отлично работает:

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

Но когда я пытаюсь использовать MultiBinding, чтобы иметь несколько свойств во всплывающей подсказке, это не работает:

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 Ответ

3 голосов
/ 21 марта 2011

Оказывается, что StringFormat на MultiBinding работает только со свойствами типа string, а свойство ToolTip имеет тип object. В этом случае для MultiBinding требуется определенный преобразователь значений.

В качестве обходного пути вы можете установить TextBlock как ToolTip и связать его свойство Text, используя MultiBinding (поскольку Text имеет тип string, он будет работать с StringFormat):

TextBlock toolTipText = new TextBlock();

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")
});

toolTipText.SetBinding(TextBlock.TextProperty, multiBinding);

ToolTip = toolTipText;
...