Просто удивление, если возможно показать WPF на отключенном объекте ТОЛЬКО (и не, когда объект включен).
Я хотел бы дать пользователю подсказку, объясняющую, почему объект в настоящее время отключается.
Я имею IValueConverter
инвертировать булевскую переменную IsEnabled
привязка свойства. Но это, кажется, не работает в этой ситуации. ToolTip
шоу и когда объект включен и отключен.
Так, возможно связать a ToolTip.IsEnabled
свойство исключительно к собственному объекту!IsEnabled
?
Довольно простой вопрос я предполагаю, но пример кода здесь так или иначе:
public class BoolToOppositeBoolConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
if (targetType != typeof(bool))
throw new InvalidOperationException("The target must be a boolean");
return !(bool)value;
}
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
if (targetType != typeof(bool))
throw new InvalidOperationException("The target must be a boolean");
return !(bool)value;
}
#endregion
}
И привязка:
<TabItem Header="Tab 2" Name="tabItem2" ToolTip="Not enabled in this situation." ToolTipService.ShowOnDisabled="True" ToolTipService.IsEnabled="{Binding Path=IsEnabled, ElementName=tabItem2, Converter={StaticResource oppositeConverter}}">
<Label Content="Item content goes here" />
</TabItem>
Спасибо люди.
Предложение JustABill сработало. Мне также нужно было определить строку как ресурс, чтобы избежать проблем с кавычками. И вам еще нужно установить ToolTipService.ShowOnDisabled = "True".
Итак, вот рабочий код, который показывает, как отображать всплывающую подсказку в WPF только , когда элемент отключен.
В верхнем контейнере включите системное пространство имен (см. sys ниже). У меня также есть пространство имен Resources, которое я назвал 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
}