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