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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top