Pergunta

Em WPF dentro de XAML como estender um ControlTemplate como tal que, quando aplicado a um botão e o botão fica deficientes desvanece-se a 0,5 opacidade enquanto se desvanece com deficiência e uma vez habilitado voltar a 1,0 opacidade.

Este efeito visual deve funcionar também quando um pai está sendo desativado.

Foi útil?

Solução

Você não precisa de um ControlTemplate para isso. Você pode fazer isso com apenas estilos. O seguinte botão estilo é aplicado a todos os botões. Ele define opacidade para 0,5 quando IsEnabled é verdadeiro e retorna para 1 automaticamente quando a condição de disparo não se aplicam mais. Se você estiver aplicando o ControlTemplate em um estilo, você pode adicionar este gatilho para aquele. Ele também funciona quando o pai está desativado desde IsEnabled é herdada.

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

Ou você exigem especificamente uma solução ControlTemplate?

Atualizar

Eu não acho que TemplateBinding suporta Converter então se você quiser fazer isso no ControlTemplate você precisa usar algo como o seguinte ligação declaração suficientemente alta na árvore lógica.

Opacity={Binding Path=IsEnabled, 
         RelativeSource={RelativeSource TemplatedParent}, 
         Converter={StaticResource BoolToDoubleConverter}}

Onde BoolToDoubleConverter é um IValueConverter que retorna 1 para verdadeiro e 0,5 para falsa. Eu ainda recomendo a abordagem estilo se você pode usar estilos. Muito mais simples que eu acredito.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top