Проблема с всплывающей подсказкой, связанной со свойством зависимости - PullRequest
0 голосов
/ 13 сентября 2011

У меня возникла проблема с всплывающими подсказками (снова!) ..

Мой код выглядит следующим образом:

Файл XAML:

<Grid>
        <Button Height="23" Margin="82,0,120,105" Name="button1" VerticalAlignment="Bottom" ToolTip="{Binding Path=Label, Mode=Default}">Button</Button>        
    </Grid>

CS файл:

/// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        Parameter p1;
        System.Timers.Timer aTimer;

        public Window1()
        {
            InitializeComponent();
            p1 = new Parameter();
            p1.Label = "One thing";
            this.DataContext = p1;

            aTimer = new System.Timers.Timer();
            aTimer.Elapsed += new System.Timers.ElapsedEventHandler(aTimer_Elapsed);
            aTimer.Interval = 5000;
            aTimer.Enabled = true;
        }

        void aTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            aTimer.Enabled = false;
            p1.Label = null;
        }        

    }

Класс параметров выглядит следующим образом:

class Parameter : System.ComponentModel.INotifyPropertyChanged
    {
        #region INotifyPropertyChanged Members

        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

        #endregion

        private string label = String.Empty;

        public string Label
        {
            get { return label; }
            set
            {
                label = value;
                OnPropertyChanged(new PropertyChangedEventArgs("Label"));
            }
        }

        private void OnPropertyChanged(PropertyChangedEventArgs propertyChangedEventArgs)
        {
            try
            {
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, propertyChangedEventArgs);
                }
            }
            catch (Exception exc)
            {
            }
        }
    }

Теперь, после нажатия кнопки, я получаю всплывающую подсказку «Одна вещь», но через 5 секунд я получаю пустую подсказку на некоторое время. Поскольку я установил для свойства зависимости значение null, подсказка не ожидалась.

После этого, если навести курсор мыши на кнопку, я не получу пустую подсказку (как и ожидалось). Только при изменении значения я получаю пустую подсказку.

Не могли бы вы помочь.

1 Ответ

0 голосов
/ 13 сентября 2011

Попробуйте это ... измените свойство Label и переменную _label на тип object вместо string, т.е. используйте его как строку, но объявите его как object.

Полагаю, что описанная выше проблема возникает из-за того, что строка null на самом деле string.Empty, а ToolTip имеет тип объекта.Бокс, который происходит, принимает пустую строку как string.empty и, следовательно, показывает пустую подсказку вместо подсказки.Но если Label является типом объекта, тогда нулевое значение не будет представлять ToolTip.

Если предлагаемое изменение типа данных свойства Label не разрешено в вашем случае, тогда используйте Converter вLabel привязка для возврата нулевого объекта для пустой строки.

Дайте мне знать, если это поможет.

...