Come associare ControlTemplate proprietà Enabled su Opacità in WPF XAML
-
16-09-2019 - |
Domanda
In WPF XAML all'interno come estendere un ControlTemplate come tale che, quando applicato a un pulsante e il pulsante viene disattivato svanisce a 0,5 opacità durante la disattivazione e, una volta abilitato dissolvenze ritorna 1,0 opacità.
Questo effetto visivo dovrebbe funzionare anche quando un genitore viene disabilitata.
Soluzione
Non è necessario un ControlTemplate per questo. È possibile raggiungere questo obiettivo con solo gli stili. Il seguente stile tasto viene applicato a tutti i pulsanti. Esso definisce opacità a 0,5 quando IsEnabled è vero e lo restituisce al 1 automaticamente quando la condizione di attivazione non si applica più. Se si sta applicando il ControlTemplate in uno stile, è possibile aggiungere questo innesco a quello. Funziona anche quando il genitore è disabilitato poiché IsEnabled è ereditato.
<Window.Resources>
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<Trigger Property="Control.IsEnabled" Value="false">
<Setter Property="Control.Opacity" Value="0.5" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
O hai specificamente bisogno di una soluzione ControlTemplate?
Aggiorna
Non credo TemplateBinding supporta Converter quindi se si vuole fare questo in ControlTemplate è necessario usare qualcosa come la seguente dichiarazione Binding abbastanza alto nella struttura logica.
Opacity={Binding Path=IsEnabled,
RelativeSource={RelativeSource TemplatedParent},
Converter={StaticResource BoolToDoubleConverter}}
Dove BoolToDoubleConverter è un IValueConverter che restituisce 1 per una vera e 0,5 per falso. Mi piacerebbe ancora vivamente l'approccio stile se è possibile utilizzare gli stili. Molto più semplice credo.