2010-06-30 5 views
20

Comment puis-je m'assurer que l'info-bulle d'un bouton n'est visible que lorsque le bouton est désactivé?WPF Tooltip Visibility

À quoi puis-je lier la visibilité de l'infobulle?

+0

Lorsque "IS" est désactivé? - Voulez-vous dire "n'est pas" désactivé? – 4imble

+8

Il peut être judicieux d'afficher une info-bulle décrivant pourquoi vous ne pouvez pas toucher ce bouton. Si telle est l'intention de David, je pense que cela a beaucoup de sens. – reuscam

+1

Ouais, je suppose, je n'étais pas difficile. J'étais vraiment intéressé :) – 4imble

Répondre

28

Vous devez définir ToolTipService.ShowOnDisabled sur Vrai sur le bouton afin que l'info-bulle soit visible lorsque le bouton est désactivé. Vous pouvez lier ToolTipService.IsEnabled sur le bouton pour activer et désactiver l'info-bulle.

+1

Pour tous ceux qui veulent faire les mêmes choses que moi, j'ai posté le xaml complet pour le bouton comme réponse. Merci pour votre aide. –

20

Ceci est la pleine XAML du bouton (basé sur la réponse de @Quartermeister)

<Button 
    x:Name="btnAdd" 
    Content="Add" 
    ToolTipService.ShowOnDisabled="True" 
    ToolTipService.IsEnabled="{Binding ElementName=btnAdd, Path=IsEnabled, Converter={StaticResource boolToOppositeBoolConverter}}" 
    ToolTip="Appointments cannot be added whilst the event has outstanding changes."/> 
3

Une réponse légèrement modifiée pour ce que David Ward a proposé. Voici le code complet

Ajouter un convertisseur de valeur à resouces comme celui-ci

<Window.Resources> 
    <Converters:NegateConverter x:Key="negateConverter"/> 
</Window.Resources> 

Définissez ensuite suivant XAML

<Button 
    x:Name="btnAdd" 
    Content="Add" 
    ToolTipService.ShowOnDisabled="True" 
    ToolTipService.IsEnabled="{Binding RelativeSource={RelativeSource self}, Path=IsEnabled, Converter={StaticResource negateConverter}}" 
    ToolTip="Hi guys this is the tool tip"/> 

Le convertisseur de valeur ressemble à ce

[ValueConversion(typeof(bool), typeof(bool))] 
    public class NegateConverter : IValueConverter 
    { 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
    return !((bool)value); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
    } 
8

Vous pouvez Faites-le en utilisant un déclencheur simple aussi. Placez simplement le morceau de code suivant dans une fenêtre.

<StackPanel Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Center"> 
    <CheckBox Name="chkDisabler" Content="Enable/disable button" Margin="10" /> 
    <Button Content="Hit me" Width="200" Height="100" IsEnabled="{Binding ElementName=chkDisabler, Path=IsChecked}"> 
     <Button.Style> 
      <Style TargetType="{x:Type Button}"> 
       <Setter Property="ToolTipService.ShowOnDisabled" Value="true" /> 
       <Setter Property="ToolTip" Value="{x:Null}" /> 
       <Style.Triggers> 
        <Trigger Property="IsEnabled" Value="False"> 
         <Setter Property="ToolTip" Value="Hi, there! I'm disabled!" /> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </Button.Style> 
    </Button> 
</StackPanel> 
+0

C'était pratique pour voir la syntaxe de définition de 'ShowOnDisabled' via un setter' Style'. – mungflesh