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

2

Когда я устанавливаю привязку всплывающей подсказки в пользовательском элементе 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);          
}  

В этом случае у меня нет всплывающей подсказки.

Где я ошибаюсь?

Теги:
wpf
tooltip
silverlight
custom-controls

1 ответ

3
Лучший ответ

Оказывается, что StringFormat on 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;
  • 0
    Спасибо, это работает как шарм! +1 Я приму ваш ответ чуть позже, чтобы дать вам больше очков репутации. Еще раз спасибо!
  • 0
    @rem - Добро пожаловать! Я думаю, что вы уже можете принять это :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню