我正在尝试在WPF表单的DataGrid单元格上设置ToolTip。虽然可以实现,但我不希望在没有弹出文本需要显示的单元格中弹出。
我看到过类似的问题在这里被问到,但我无法让那些解决方案起作用。
这是CellTemplate:
为了避免弹出空白工具提示文本,我已经添加了以下内容:
我看到的是,当文本为空时,它不会弹出工具提示(很好),但当有文本时,它会弹出一个黑色矩形。
如果没有tooltip样式设置,文本框可以正常弹出(除了空文本也会弹出)。
当我删除时,
我看到过类似的问题在这里被问到,但我无法让那些解决方案起作用。
这是CellTemplate:
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding itemType}" VerticalAlignment="Center">
<ToolTipService.ToolTip>
<TextBlock Text="{Binding toolTipText}" />
</ToolTipService.ToolTip>
</Image>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
为了避免弹出空白工具提示文本,我已经添加了以下内容:
<DataGrid.Resources>
<Style x:Key="{x:Type ToolTip}" TargetType="{x:Type ToolTip}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToolTip}">
<Border Background="Black" Visibility="{TemplateBinding Content, Converter={StaticResource StringToVisibilityConverter}}" >
<TextBlock Width="50" FontFamily="Tahoma" FontSize="11" Text="{TemplateBinding Content}" Foreground="WhiteSmoke" Padding="2" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGrid.Resources>
StringToVisibilityConverter 的定义如下:
public class StringToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
var stringValue = String.Empty;
if (value is System.Windows.Controls.TextBlock) stringValue = (value as System.Windows.Controls.TextBlock).Text;
else stringValue = value as string;
return string.IsNullOrWhiteSpace(stringValue) ?
Visibility.Hidden : Visibility.Visible;
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
return value;
}
}
我看到的是,当文本为空时,它不会弹出工具提示(很好),但当有文本时,它会弹出一个黑色矩形。
如果没有tooltip样式设置,文本框可以正常弹出(除了空文本也会弹出)。
当我删除时,
Background="Black"
如果边框样式设置了,但我没有看到任何弹出内容。