2010-06-30 18 views
20

Jak mogę się upewnić, że etykieta narzędzia przycisku jest widoczna tylko wtedy, gdy przycisk jest wyłączony?Widget WSF Widget narzędziowy

Co mogę powiązać z widocznością podpowiedzi?

+0

Kiedy "IS" jest wyłączone? - Czy masz na myśli "nie jest" wyłączony? – 4imble

+8

Może być sens wyświetlania etykiety narzędziowej opisującej, dlaczego nie można dotknąć tego przycisku. Jeśli to jest zamiar Davida, myślę, że to ma sens. – reuscam

+1

Tak, tak myślę, nie byłem wybredny. Byłem po prostu naprawdę zainteresowany :) – 4imble

Odpowiedz

28

Musisz ustawić ToolTipService.ShowOnDisabled na wartość True na przycisku, aby w ogóle pojawiła się wskazówka, gdy przycisk jest wyłączony. Możesz powiązać ToolTipService.IsEnabled na przycisku, aby włączyć lub wyłączyć etykietę narzędziową.

+1

Dla każdego, kto chce robić to samo co ja, opublikowałem pełne xaml dla przycisku jako odpowiedzi. Dzięki za pomoc. –

20

Jest to pełna XAML przycisku (na podstawie odpowiedzi na @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

nieco zmodyfikowaną odpowiedź na to, co David Ward zaproponowała. Oto pełny kod

Dodaj konwerter wartości do resouces jak ten

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

Następnie zdefiniować następujące 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"/> 

Konwerter wartość wygląda to

[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

Można zrób to również za pomocą prostego wyzwalacza. Wystarczy umieścić następujący fragment kodu w oknie.

<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

To było przydatne, aby zobaczyć składnię do ustawienia 'ShowOnDisabled' za pomocą settera' Style'. – mungflesh