Date: 02.05.2017 15:58:26
Оно должно, и оно действительно остается. Но проблема в том, что стандартный шаблон кнопки имеет свою логику на событие OnMouseOver, которая входит в конфликт с вашей. Поэтому его нужно подправить:
- В конструкторе XAML открывает у кнопки свойства.
- Находим свойство Template
- Правой кнопкой - Извлечь в ресурс
- Находим в шаблоне строку RenderMouseOver="{TemplateBinding UIElement.IsMouseOver} и выпиливаем ее.
Получается как-то так:
<Window x:Class="StylesTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525" xmlns:my="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"> <Window.Resources> <Style TargetType="{x:Type Button}"> <Style.Setters> <Setter Property="Button.Background" Value="Black" /> <Setter Property="Button.Foreground" Value="White" /> <Setter Property="Button.FontFamily" Value="Verdana" /> <Setter Property="Button.Margin" Value="10" /> </Style.Setters> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="FontSize" Value="14" /> <Setter Property="Foreground" Value="Red" /> <Setter Property="Background" Value="Yellow" /> </Trigger> <Trigger Property="IsPressed" Value="true"> <Setter Property="FontSize" Value="14" /> <Setter Property="Foreground" Value="Lime" /> <Setter Property="Background" Value="Yellow" /> </Trigger> </Style.Triggers> </Style> <ControlTemplate x:Key="Template1" TargetType="ButtonBase"> <my:ButtonChrome Background="{TemplateBinding Control.Background}" BorderBrush="{TemplateBinding Control.BorderBrush}" Name="Chrome" RenderDefaulted="{TemplateBinding Button.IsDefaulted}" RenderPressed="{TemplateBinding ButtonBase.IsPressed}" SnapsToDevicePixels="True"> <ContentPresenter Content="{TemplateBinding ContentControl.Content}" ContentStringFormat="{TemplateBinding ContentControl.ContentStringFormat}" ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}" HorizontalAlignment="{TemplateBinding Control.HorizontalContentAlignment}" Margin="{TemplateBinding Control.Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding Control.VerticalContentAlignment}" /> </my:ButtonChrome> <ControlTemplate.Triggers> <Trigger Property="UIElement.IsKeyboardFocused" Value="True"> <Setter Property="my:ButtonChrome.RenderDefaulted" TargetName="Chrome" Value="True" /> </Trigger> <Trigger Property="ToggleButton.IsChecked" Value="True"> <Setter Property="my:ButtonChrome.RenderPressed" TargetName="Chrome" Value="True" /> </Trigger> <Trigger Property="UIElement.IsEnabled" Value="False"> <Setter Property="Control.Foreground" Value="#FFADADAD" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Window.Resources> <StackPanel Background="Black" > <Button x:Name="button1" Content="Кнопка 1" Template="{StaticResource Template1}" /> <Button x:Name="button2" Content="Кнопка 2" /> </StackPanel> </Window>
Идея взята отсюда:
http://stackoverflow.com/questions/250622/mouseover-highlighting-style-returning-to-default-after-a-second-caused-by-aero
Автор: VadimTagil