2010-06-30 17 views
20

Come posso garantire che la descrizione comando di un pulsante sia visibile solo quando il pulsante è disattivato?Visibilità tooltip WPF

A cosa è possibile associare la visibilità del tooltip?

+0

Quando "IS" è disabilitato? - intendevi "non è" disabilitato? – 4imble

+8

Potrebbe avere senso visualizzare un suggerimento che descrive il motivo per cui non è possibile toccare questo pulsante. Se questo è l'intento di David, penso che abbia molto senso. – reuscam

+1

Sì, credo, non ero schizzinoso. Ero sinceramente interessato :) – 4imble

risposta

28

È necessario impostare ToolTipService.ShowOnDisabled su True sul pulsante per rendere visibile la descrizione comando quando il pulsante è disattivato. È possibile associare ToolTipService.IsEnabled al pulsante per abilitare e disabilitare la descrizione comando.

+1

Per chi vuole fare le stesse cose di me, ho postato l'intero xaml per il pulsante come risposta. Grazie per il vostro aiuto. –

20

Questa è la piena XAML del pulsante (basata sulla risposta di @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

Una risposta leggermente modificata per quello che David Ward ha proposto. Ecco il codice completo

Aggiungi un convertitore di valore da resouces come questo

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

Quindi definire seguente 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"/> 

Il convertitore di valore simile a questa

[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

Puoi fallo anche con un semplice trigger. Basta posizionare il seguente pezzo di codice in una finestra.

<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

Questo è stato utile per vedere la sintassi per l'impostazione di 'ShowOnDisabled' tramite un setter' Stile'. – mungflesh

Problemi correlati