工具提示绑定到依赖项属性的问题



我又遇到了工具提示的问题。

我的代码如下: 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;
        }        
    }

Parameter类如下:

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,所以我没有期望任何工具提示。

之后,如果我将鼠标悬停在按钮上,我没有得到空的工具提示(如预期的那样)。只有在改变值的时候,我才会得到空的工具提示。

试试这个…将Label属性和_label变量更改为object类型而不是string,即使用它作为字符串,但将其声明为object

我猜上面的问题发生,因为null字符串实际上是string.EmptyToolTip是对象类型。发生的装箱假设空字符串为string.empty,因此显示空工具提示而不是没有工具提示。但是如果Label是对象类型,那么空值将表示没有ToolTip

如果在您的情况下不允许Label属性的建议数据类型更改,那么在Label绑定中使用Converter来返回空字符串的空对象。

如果有帮助请告诉我

最新更新