Tenho um botão na minha página com este XAML:
<Button Content="Button" HorizontalAlignment="Left" VerticalAlignment="Bottom"
Width="50" Height="50" HorizontalContentAlignment="Left"
BorderBrush="{x:Null}" Foreground="{x:Null}" Margin="50,0,0,0">
<Button.Style>
<Style TargetType="Button">
<Setter Property="Background" Value="Green"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
Mas quando coloco o mouse sobre o botão, o plano de fundo do botão muda para o plano de fundo cinza padrão do Windows.
Qual é o problema?
Esta é a imagem do botão antes e depois do mouseover:
Antes:
Depois:
Forward-48.png
e acionar o IsMouseOver para alterá-la da mesma formaForward-48.png
. Estou tentando usar o seu código com imagens diferentes e tudo funcionou bem.Respostas:
Para remover o
MouseOver
comportamento padrão do,Button
você precisará modificar oControlTemplate
. Mudar suaStyle
definição para o seguinte deve resolver o problema:EDIT: Está alguns anos atrasado, mas você é realmente capaz de definir o pincel de borda dentro da borda que está lá. Idk se isso foi apontado, mas não parece que foi ...
fonte
ControlTemplate
, então eles substituem osStyle
gatilhos do OP .ControlTemplate
diz basicamente 'Pinte a borda de acordo com aBackground
cor. E se o mouse estiver sobre o botão - pinte essa borda com esta cor, enquanto no estilo você só tem acesso àBackground
cor, e não à cor da borda subjacente. Vejo você apontar, porém, o estilo WPF deixa muito a desejar ...Todas as respostas até agora envolvem a substituição completa do comportamento do botão padrão por outra coisa. No entanto, IMHO é útil e importante entender que é possível alterar apenas a parte de seu interesse , editando o modelo padrão existente para um elemento XAML.
No caso de lidar com o efeito de foco em um botão WPF, a mudança na aparência em um
Button
elemento WPF é causada por umTrigger
no estilo padrão deButton
, que é baseado naIsMouseOver
propriedade e define as propriedadesBackground
eBorderBrush
doBorder
elemento de nível superior no modelo de controle. OButton
plano de fundo do elemento está abaixoBorder
do plano de fundo do elemento, portanto, alterar aButton.Background
propriedade não impede que o efeito de foco seja visto.Com algum esforço, você pode substituir esse comportamento por seu próprio configurador, mas como o elemento que você precisa afetar está no modelo e não está diretamente acessível em seu próprio XAML, essa abordagem seria difícil e IMHO excessivamente complexa.
Outra opção seria usar o gráfico como
Content
para o emButton
vez deBackground
. Se precisar de conteúdo adicional sobre o gráfico, você pode combiná-los com umGrid
como o objeto de nível superior no conteúdo.No entanto, se você literalmente quiser apenas desabilitar totalmente o efeito de foco (em vez de apenas ocultá-lo), você pode usar o Visual Studio XAML Designer:
<Trigger Property="IsMouseOver" Value="true">...</Trigger>
elemento. Claro, você pode fazer qualquer alteração no modelo que desejar nesse ponto.Quando terminar, o estilo do botão será mais ou menos assim:
(Observação: você pode omitir as
p:
qualificações de namespace XML no código real ... Eu as forneço aqui apenas porque o formatador de código Stack Overflow XML fica confuso com<Style/>
elementos que não têm um nome totalmente qualificado com namespace XML.)Se você quiser aplicar o mesmo estilo a outros botões, basta clicar com o botão direito neles e escolher "Editar modelo / Aplicar recurso" e selecionar o estilo que acabou de adicionar para o primeiro botão. Você pode até tornar esse estilo o estilo padrão para todos os botões, usando as técnicas normais para aplicar um estilo padrão a elementos em XAML.
fonte
Isto funcionou bem para mim.
Estilo de Botão
Botão
Notas
fonte
Stroke
cor ao passar o mouse sobre oBorder
também, sem que ele apenas passe o mouse sobre oPath
?x:Key="TransparentStyle"
parte e o uso foram importantes para eu chegar lá ... Obrigado!Só quero compartilhar o estilo do meu botão do ResourceDictionary que tenho usado. Você pode alterar livremente o plano de fundo onHover nos gatilhos de estilo. " ColorAnimation To = * seu BG desejado (ou seja, # FFCEF7A0)". O botão BG também reverterá automaticamente ao seu BG original após o estado mouseOver. Você pode até definir a velocidade da transição.
Dicionário de Recursos
tudo que você precisa fazer é chamar o estilo.
Exemplo de implementação
fonte
Uma resposta um pouco mais difícil que usa ControlTemplate e tem um efeito de animação (adaptado de https://docs.microsoft.com/en-us/dotnet/framework/wpf/controls/customizing-the-appearance-of-an-existing- controle )
Em seu dicionário de recursos, defina um modelo de controle para seu botão como este:
em seu XAML, você pode usar o modelo acima para o botão conforme abaixo:
Defina o seu botão
Espero que ajude
fonte
Para alterar o estilo do botão
1º: definir estilos de recursos
2º definir o código do botão
3º código atrás
fonte