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.
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.
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>
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>
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>