我尝试使用Datagrid在WPF表单的单元格上设置工具提示。 这样可行,但我不想让它弹出没有要显示的弹出文本的单元格。
我在这里看到过类似的问题,但我还没有能够让这些解决方案有效。
这是CellTemplate:
$value
为防止弹出空白工具提示文字,我已添加:
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding itemType}" VerticalAlignment="Center">
<ToolTipService.ToolTip>
<TextBlock Text="{Binding toolTipText}" />
</ToolTipService.ToolTip>
</Image>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
StringToVisibilityConverter定义如下:
<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>
我所看到的是,当文字为空(好)时,它不会弹出工具提示,但是当有文字时,它会弹出一个黑色矩形。
如果没有工具提示的样式设置,则弹出文本框确定(除了弹出空白文本外)。
当我删除
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;
}
}
在边框造型上然后我看不到任何弹出窗口。
答案 0 :(得分:3)
您可以使用以下celltemplate简化:
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding itemType}" VerticalAlignment="Center">
<Image.ToolTip>
<ToolTip Visibility="{Binding toolTipText, Converter={StaticResource StringToVisibilityConverter}}">
<Border Background="Black" >
<TextBlock Text="{Binding toolTipText}" />
</Border>
</ToolTip>
<Image.ToolTip>
</Image>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
转换器可以简化为:
public class StringToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return String.IsNullOrEmpty(value as string) ? Visibility.Collapsed : Visibility.Visible;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
答案 1 :(得分:0)
如果没有内容,您可以尝试编辑工具提示模板并添加触发器以折叠工具提示。如果您将模板添加到App.xaml文件中,这也可以隐藏应用程序中可能存在的所有空工具提示。
在App.xaml中,添加对Microsoft核心libriarys的引用:
<Application
xmlns:sys="clr-namespace:System;assembly=mscorlib"
>
然后添加新的工具提示模板:
<Style x:Key="{x:Type ToolTip}" TargetType="ToolTip">
<Setter Property="OverridesDefaultStyle" Value="true"/>
<Setter Property="HasDropShadow" Value="True"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToolTip">
<Border Name="Border" Background="#FFFFFF" BorderBrush="#000000" BorderThickness="1" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}">
<ContentPresenter Margin="4" HorizontalAlignment="Left" VerticalAlignment="Top" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="Content" Value="{x:Static sys:String.Empty}">
<Setter Property="Visibility" Value="Collapsed"/>
</Trigger>
<Trigger Property="Content" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed"/>
</Trigger>
<Trigger Property="HasDropShadow" Value="true">
<Setter TargetName="Border" Property="CornerRadius" Value="4"/>
<Setter TargetName="Border" Property="SnapsToDevicePixels" Value="true"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>