Tengo un botón en mi página con 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>
Pero cuando coloco el mouse sobre mi botón, el fondo del botón cambia al fondo gris predeterminado de Windows.
¿Cuál es el problema?
Esta es la imagen del botón antes y después del mouseover:
Antes:
Después:
Forward-48.png
y activar IsMouseOver para cambiarla por la mismaForward-48.png
. Estoy tratando de usar su código con diferentes imágenes y todo funcionó bien.Respuestas:
Para eliminar el
MouseOver
comportamiento predeterminado enButton
, deberá modificar el archivoControlTemplate
. Cambiar suStyle
definición a la siguiente debería funcionar:EDITAR: Es unos años tarde, pero en realidad puede colocar el pincel de borde dentro del borde que está allí. No sé si se señaló eso, pero no parece que lo fuera ...
fuente
ControlTemplate
, por lo que anulan losStyle
activadores de OP .ControlTemplate
básicamente dice 'Pinte el borde de acuerdo con elBackground
color'. Y si el mouse está sobre el botón, pinte ese borde de este color en su lugar, mientras que en el estilo solo tiene acceso alBackground
color, y no al color del borde subyacente. Sin embargo, veo queTodas las respuestas hasta ahora implican reemplazar completamente el comportamiento del botón predeterminado con algo más. Sin embargo, en mi humilde opinión, es útil e importante comprender que es posible cambiar solo la parte que le interesa , editando la plantilla predeterminada existente para un elemento XAML.
En el caso de tratar con el efecto de desplazamiento en un botón WPF, el cambio en la apariencia de un
Button
elemento WPF es causado por unTrigger
estilo predeterminado paraButton
, que se basa en laIsMouseOver
propiedad y establece las propiedadesBackground
yBorderBrush
delBorder
elemento de nivel superior en la plantilla de control. ElButton
fondo del elemento está debajoBorder
del fondo del elemento, por lo que cambiar laButton.Background
propiedad no evita que se vea el efecto de desplazamiento.Con un poco de esfuerzo, podría anular este comportamiento con su propio establecedor, pero debido a que el elemento que necesita afectar está en la plantilla y no se puede acceder directamente en su propio XAML, ese enfoque sería difícil y, en mi humilde opinión, demasiado complejo.
Otra opción sería utilizar el gráfico como
Content
para el enButton
lugar de comoBackground
. Si necesita contenido adicional sobre el gráfico, puede combinarlos con aGrid
como objeto de nivel superior en el contenido.Sin embargo, si literalmente solo desea deshabilitar el efecto de desplazamiento por completo (en lugar de solo ocultarlo), puede usar Visual Studio XAML Designer:
<Trigger Property="IsMouseOver" Value="true">...</Trigger>
elemento. Por supuesto, puede realizar cualquier cambio en la plantilla que desee en ese momento.Cuando haya terminado, el estilo del botón se verá así:
(Nota: puede omitir las
p:
calificaciones del espacio de nombres XML en el código real ... Las proporciono aquí solo porque el formateador de código XML de Stack Overflow se confunde con<Style/>
elementos que no tienen un nombre completo con el espacio de nombres XML).Si desea aplicar el mismo estilo a otros botones, puede simplemente hacer clic derecho en ellos y elegir "Editar plantilla / Aplicar recurso" y seleccionar el estilo que acaba de agregar para el primer botón. Incluso puede hacer que ese estilo sea el estilo predeterminado para todos los botones, utilizando las técnicas normales para aplicar un estilo predeterminado a los elementos en XAML.
fuente
Esto funcionó bien para mí.
Estilo de botón
Botón
Notas
fuente
Stroke
color al pasar elBorder
mouse también, sin que solo se sitúe sobre elPath
?x:Key="TransparentStyle"
parte y el uso fueron importantes para mí para llegar allí ... ¡Gracias!Solo quiero compartir mi estilo de botón de mi ResourceDictionary que he estado usando. Puede cambiar libremente el fondo de onHover en los activadores de estilo. " ColorAnimation To = * su BG deseado (es decir, # FFCEF7A0)". El BG del botón también volverá automáticamente a su BG original después del estado mouseOver. Incluso puede configurar la velocidad de la transición.
Diccionario de recursos
todo lo que tienes que hacer es llamar al estilo.
Implementación de ejemplo
fuente
Una respuesta un poco más difícil que usa ControlTemplate y tiene un efecto de animación (adaptado de https://docs.microsoft.com/en-us/dotnet/framework/wpf/controls/customizing-the-appearance-of-an-existing- control )
En su diccionario de recursos, defina una plantilla de control para su botón como esta:
en su XAML puede usar la plantilla de arriba para su botón de la siguiente manera:
Define tu botón
Espero eso ayude
fuente
Para cambiar el estilo del botón
Primero: definir estilos de recursos
2do código de botón definido
3er código detrás
fuente