Подсказка пользовательского элемента управления WPF со значением свойства пользовательского элемента управления - PullRequest
4 голосов
/ 20 марта 2011

В приложении WPF у меня есть пользовательский элемент управления.

public class MyControl : Control
{
    static MyControl()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(MyControl), new FrameworkPropertyMetadata(typeof(MyControl)));
    }

    public static readonly DependencyProperty ControlStatusProperty = DependencyProperty.Register("ControlStatus", typeof(int), typeof(MyControl), new PropertyMetadata(16));

    public int ControlStatus
    {
        get
        {
            return (int)GetValue(ControlStatusProperty);
        }
        set
        {
            SetValue(ControlStatusProperty, value);
            ChangeVisualState(false);
        }
    }
 ...
    public override void OnApplyTemplate()
    {
        base.OnApplyTemplate();
       ...
        ToolTipService.SetToolTip(this, "Status: " + ControlStatus);          
    }

    private void ChangeVisualState(bool useTransitions)
    {
       ...
       ToolTipService.SetToolTip(this, "Status: " + ControlStatus);
    }

Проблема в том, что во всплывающей подсказке всегда отображается значение свойства ControlStatus, которое было на момент выполнения OnApplyTemplate() метода.
Свойство ControlStatus пользовательского элемента управления было изменено во время выполнения, но во всплывающей подсказке всегда отображается начальное значение.

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

1 Ответ

5 голосов
/ 20 марта 2011

Вам необходимо использовать привязку вместо статической установки подсказки с помощью ToolTipService.SetToolTip. В вашем случае это должно быть так:

SetBinding(ToolTipProperty, new Binding
                            {
                                Source = this,
                                Path = new PropertyPath("ControlStatus"),
                                StringFormat = "Status: {0}"
                            });
...