stringformat c# wpf binding tooltip ivalueconverter

c# - wpf datagrid stringformat



Mostrar informaciĆ³n sobre herramientas de WPF solo en elementos deshabilitados (2)

Solo me pregunto si es posible mostrar un WPF en un elemento deshabilitado SOLAMENTE (y no cuando el elemento está habilitado).

Me gustaría dar al usuario una información sobre herramientas que explique por qué un elemento está actualmente deshabilitado.

Tengo un IValueConverter para invertir el IsEnabled propiedad IsEnabled booleano. Pero no parece funcionar en esta situación. La ToolTip se muestra tanto cuando el elemento está habilitado como deshabilitado.

¡Así es posible vincular una propiedad ToolTip.IsEnabled exclusivamente a la propiedad de un elemento! ¿ IsEnabled ?

Una pregunta bastante sencilla, supongo, pero codifique el ejemplo aquí de todos modos:

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 }

Y la encuadernación:

<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>

Gracias amigos.


La sugerencia de JustABill funcionó. También necesitaba definir la cadena como un recurso para evitar problemas con comillas. Y aún debe configurar ToolTipService.ShowOnDisabled = "True".

Entonces, aquí está el código de trabajo que muestra cómo mostrar información sobre herramientas en WPF solo cuando un elemento está deshabilitado.

En el contenedor superior, incluya el espacio de nombres del sistema (vea sys abajo). También tengo un espacio de nombres de recursos, que llamé "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" >

Entonces necesitas

<Window.Resources> <Res:FalseToStringConverter x:Key="falseToStringConv" /> <sys:String x:Key="stringToShowInTooltip">This item is disabled because...</sys:String> </Window.Resources>

En mi caso, era un elemento de pestaña en el que estaba interesado. Aunque podría ser cualquier elemento de la interfaz de usuario ...

<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>

Y el convertidor en código detrás (o donde quieras ponerlo). Nota, el mío entró en un espacio de nombres llamado Recursos , que fue declarado anteriormente.

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 }


Un poco fuera de fecha, pero conseguí este trabajo configurando el modo RelativeSource en Self en lugar de establecer el ElementName dentro del enlace.

<TabItem Header="Tab 2" Name="tabItem2" ToolTip="Not enabled in this situation." ToolTipService.ShowOnDisabled="True" ToolTipService.IsEnabled="{Binding Path=IsEnabled, RelativeSource={RelativeSource Mode=Self}, Converter={StaticResource oppositeConverter}}"> <Label Content="Item content goes here" /> </TabItem>