Todas 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 un Trigger
estilo predeterminado para Button
, que se basa en la IsMouseOver
propiedad y establece las propiedades Background
y BorderBrush
del Border
elemento de nivel superior en la plantilla de control. El Button
fondo del elemento está debajo Border
del fondo del elemento, por lo que cambiar la Button.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 en Button
lugar de como Background
. Si necesita contenido adicional sobre el gráfico, puede combinarlos con a Grid
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:
- Mientras editas tu XAML, selecciona la pestaña "Diseño" .
- En la pestaña "Diseño" , busque el botón para el que desea desactivar el efecto.
- Haga clic derecho en ese botón y seleccione "Editar plantilla / Editar una copia ..." . En el mensaje que aparece, seleccione dónde desea que se coloque el nuevo recurso de plantilla. Esto parecerá no hacer nada, pero de hecho el Diseñador habrá agregado nuevos recursos donde usted lo indicó y cambiado su elemento de botón para hacer referencia al estilo que usa esos recursos como la plantilla de botón.
- Ahora puedes editar ese estilo. Lo más fácil es eliminar o comentar (por ejemplo , Ctrl+ E, C) el
<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í:
<p:Style x:Key="FocusVisual">
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate>
<Rectangle Margin="2" SnapsToDevicePixels="true" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1" StrokeDashArray="1 2"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</p:Style>
<SolidColorBrush x:Key="Button.Static.Background" Color="#FFDDDDDD"/>
<SolidColorBrush x:Key="Button.Static.Border" Color="#FF707070"/>
<SolidColorBrush x:Key="Button.MouseOver.Background" Color="#FFBEE6FD"/>
<SolidColorBrush x:Key="Button.MouseOver.Border" Color="#FF3C7FB1"/>
<SolidColorBrush x:Key="Button.Pressed.Background" Color="#FFC4E5F6"/>
<SolidColorBrush x:Key="Button.Pressed.Border" Color="#FF2C628B"/>
<SolidColorBrush x:Key="Button.Disabled.Background" Color="#FFF4F4F4"/>
<SolidColorBrush x:Key="Button.Disabled.Border" Color="#FFADB2B5"/>
<SolidColorBrush x:Key="Button.Disabled.Foreground" Color="#FF838383"/>
<p:Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
<Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
<Setter Property="Background" Value="{StaticResource Button.Static.Background}"/>
<Setter Property="BorderBrush" Value="{StaticResource Button.Static.Border}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Padding" Value="1"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="true">
<ContentPresenter x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsDefaulted" Value="true">
<Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
</Trigger>
<!--<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background" TargetName="border" Value="{StaticResource Button.MouseOver.Background}"/>
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.MouseOver.Border}"/>
</Trigger>-->
<Trigger Property="IsPressed" Value="true">
<Setter Property="Background" TargetName="border" Value="{StaticResource Button.Pressed.Background}"/>
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Pressed.Border}"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Background" TargetName="border" Value="{StaticResource Button.Disabled.Background}"/>
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Disabled.Border}"/>
<Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="{StaticResource Button.Disabled.Foreground}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</p:Style>
(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.
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.