如果需要,显示WPF工具提示

我在一个有限大小的控件中有一个TextBlock。 如果文本太长而无法放入控件中,我想显示带有全文的工具提示。 这是您从许多应用程序中肯定知道的经典行为。

我尝试使用Converter将TextBlock宽度转换为Tooltip的Visibility。

           

问题是在转换器中:

 public object Convert(object value, ... 

‘value’是DataBound项。 我希望’value’成为TextBlock,观察它的宽度,并将它与GridViewColumn.Width进行比较。

我想通了,Tooltip有PlacementTarget属性,它指定具有Tooltip的UI元素。 如果有人需要它:

         

然后编写一个转换器,将TextBlock转换为Visibility(基于TextBlock宽度)。

好的,那么为什么选择硬XAML方式呢? 这有效:

        

在Control.xaml.cs中:

 private void TextBlock_IsMouseDirectlyOverChanged(object sender, DependencyPropertyChangedEventArgs e) { bool isMouseOver = (bool)e.NewValue; if (!isMouseOver) return; TextBlock textBlock = (TextBlock)sender; bool needed = textBlock.ActualWidth > (this.listView.View as GridView).Columns[2].ActualWidth; ((ToolTip)textBlock.ToolTip).Visibility = needed ? Visibility.Visible : Visibility.Collapsed; } 

我认为你必须看一下ControlTemplate触发器来解决这个问题。 不幸的是,ControlTemplate触发器总是与特定值进行比较,不小于或大于。 您可以使其显示,例如宽度= 100,而不是宽度<100。