Предложение JustABill сработало. Мне также нужно было определить строку как ресурс, чтобы избежать проблем с кавычками. И вам все еще нужно установить ToolTipService.ShowOnDisabled = "True".
Итак, вот рабочий код, который показывает, как отображать всплывающую подсказку в WPF только , когда элемент отключен.
В верхний контейнер включите пространство имен системы (см. sys ниже). У меня также есть пространство имен ресурсов, которое я назвал "Res".
<Window x:Class="MyProjectName.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:Res="clr-namespace:MyProjectName.Resources"
>
Тогда вам нужно
<Window.Resources>
<Res:FalseToStringConverter x:Key="falseToStringConv" />
<sys:String x:Key="stringToShowInTooltip">This item is disabled because...</sys:String>
</Window.Resources>
В моем случае это был элемент вкладки, который меня интересовал. Хотя это мог быть любой элемент пользовательского интерфейса ...
<TabItem Name="tabItem2" ToolTipService.ShowOnDisabled="True" ToolTip="{Binding Path=IsEnabled, ElementName=tabItem2, Converter={StaticResource falseToStringConv}, ConverterParameter={StaticResource stringToShowInTooltip}}">
<Label Content="A label in the tab" />
</TabItem>
И конвертер в коде позади (или там, где вы хотите его поставить). Обратите внимание, что мое имя вошло в пространство имен с именем Resources , которое было объявлено ранее.
public class FalseToStringConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is bool && parameter is string)
{
if ((bool)value == false)
return parameter.ToString();
else return null;
}
else
throw new InvalidOperationException("The value must be a boolean and parameter must be a string");
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}