wpf: ¿cómo mostrar información sobre herramientas cuando el botón está deshabilitado por comando?

162

Estoy tratando de mostrar información sobre herramientas independientemente del estado de los botones, pero esto no parece ser el truco:

<Button Command="{Binding Path=CommandExecuteAction}" 
        ToolTip="{Binding Path=Description}" ToolTipService.ShowOnDisabled="true"
        Style="{StaticResource toolbarButton}">
   <Image Source="{Binding Path=Icon}"></Image>
</Button>

¿Cómo puedo mostrar la información sobre herramientas cuando el botón está deshabilitado debido al comando. CanExecute return false?

Nota:

ToolTipService.ShowOnDisabled = "true" funciona de maravilla. La razón por la que esto no funcionó en mi ejemplo es porque el estilo asociado con el botón redefine la plantilla de control y desactiva la prueba de impacto en el botón cuando el botón estaba deshabilitado (IsHitTestVisible = false). La reactivación de las pruebas de impacto en la plantilla de control hizo que la información sobre herramientas apareciera cuando el botón estaba desactivado.

Mario
fuente
posible duplicado de WPF Tooltip Visibility
OJ.
Estoy usando ToolTipService.ShowOnDisabled, pero no funciona.
Marius
1
Solo borra esta pregunta. Hice un pequeño proyecto de prueba y ToolTipService.ShowOnDisabled funciona bien.
Marius
15
Me alegra que esta pregunta no se haya eliminado. Rápidamente y con precisión respondió una pregunta / problema que tuve, que es la razón exacta por la que vine a SO en primer lugar. Gracias por ser perezoso (tm) Marius. :-)
Jere.Jones
Disculpe, ¿hay alguna forma en que pueda mostrarlo solo cuando esté deshabilitado?
advapi

Respuestas:

305

ToolTipService.ShowOnDisabled = "True"

Kishore Kumar
fuente
10
Referencia de MSDN: msdn.microsoft.com/en-us/library/…
David
3
Esto va en la declaración xaml para el objeto en el que aparecerá la información sobre herramientas, es decir:<Button ToolTipService.ShowOnDisabled="True">...
apoya formalmente a Monica el
26

Este es un buen método para agregar a su código de inicio

ToolTipService.ShowOnDisabledProperty.OverrideMetadata(
    typeof(Control),
    new FrameworkPropertyMetadata(true));
sacha barber
fuente
¿Puedes explicar qué hace esto? Decir que es un buen método en el inicio no explica.
Stealth Rabbi
Asegura que para cualquier clase que hereda de control, información sobre herramientas se muestran incluso si la instancia de control está desactivado
sacha barbero
3
Es irónico que los usuarios tengan la mayor necesidad de la información sobre herramientas cuando el control está deshabilitado, ya que quieren saber por qué está deshabilitado. Este es un buen ejemplo de un valor predeterminado en WPF que es incorrecto la gran mayoría de las veces. Entonces vale la pena cambiarlo.
Contango
2

Haga que la información sobre herramientas sea visible para TODOS los botones y casillas de verificación deshabilitados:

<Window.Resources>
    <Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}>
        <Setter Property="ToolTipService.ShowOnDisabled" Value="true"/>
    </Style>
    <Style TargetType="{x:Type CheckBox}" BasedOn="{StaticResource {x:Type CheckBox}}>
        <Setter Property="ToolTipService.ShowOnDisabled" Value="true"/>
    </Style>
</Window.Resources>

Esto BasedOn=...evita que pierda cualquier otro estilo que se haya aplicado antes a la casilla de verificación o al botón. Si no utiliza ningún otro estilo para el botón o la casilla de verificación, puede eliminar las BasedOn=..partes

Blechdose
fuente