wake-up-neo.net

WPF-Button-Bild "grau machen"?

Ich habe ein einfaches Button-Steuerelement, das ein Image-Objekt als Inhalt enthält. Ich möchte die Opazität Image auf 0,5 setzen, wenn Button deaktiviert ist, um einen zusätzlichen visuellen Hinweis auf den Status Button bereitzustellen. 

Was ist der einfachste Weg, um dieses Ergebnis in XAML zu erreichen? Danke für Ihre Hilfe.

50
David Veeneman

Verwenden Sie einen Auslöser im Bildstil. (Es wäre natürlicher, es in den Button-Stil zu setzen, aber der Button-Stil kann das Bild aus ärgerlichen technischen Gründen nicht leicht beeinflussen. Es könnte in der ControlTemplate des Buttons gemacht werden, aber das ist übertrieben für was du willst hier.)

<Button>
  <Image Source="something.png">
    <Image.Style>
      <Style TargetType="Image">
        <Style.Triggers>
          <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Opacity" Value="0.5" />
          </Trigger>
        </Style.Triggers>
      </Style>
    </Image.Style>
  </Image>
</Button>

Beachten Sie, dass wir hier die Tatsache ausnutzen, dass das Bild deaktiviert wird, wenn die Schaltfläche deaktiviert ist, sodass wir direkt auf die IsEnabled-Eigenschaft des Bildes auslösen können. In anderen Fällen wird die Button-Eigenschaft, die ausgelöst werden soll, möglicherweise nicht von Image geerbt. In diesem Fall müssten wir einen DataTrigger mit der FindAncestor RelativeSource verwenden, um eine Bindung an die enthaltende Schaltfläche herzustellen.

148
itowlson

Wenn Sie etwas mehr generisches wollen, fügen Sie dies in Ihrem Ressourcenabschnitt für Ihr Fenster oder UserControl ein. 

<UserControl.Resources>     
    <Style x:Key="ImageEnabled" TargetType="Image">
        <Style.Triggers>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Opacity" Value="0.25"></Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>

Und im eigentlichen Button einfach das tun

<Button>
    <Image Source="{StaticResource LinkImage}" Style="{StaticResource ImageEnabled}"/>
</Button>
32
CGsoldier

Hier ist ein generischer Stil, den Sie anwenden können:

<Style TargetType="Button">
    <Style.Resources>
        <Style TargetType="Image">
            <Style.Triggers>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Opacity" Value="0.5" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Style.Resources>
</Style>
18
Tower

Wenn Sie möchten, dass die gesamte Schaltfläche ausgegraut ist, hat das Styling der Schaltfläche für mich funktioniert. Es scheint den gesamten Inhalt der Schaltflächen auszugleichen. 

                    <Button.Style>
                        <Style TargetType="Button">
                            <Style.Triggers>
                                <Trigger Property="IsEnabled" Value="False">
                                    <Setter Property="Opacity" Value=".75"/>
                                </Trigger>
                            </Style.Triggers>
                        </Style>
                    </Button.Style>
0
voluntier