MouseOver destacando o estilo retornando ao padrão após um segundo (causado por aero?)
Pergunta
Eu tentava estilizar meus combinação para combinar com o restante da interface do usuário, mas estou tendo problemas com o destaque do IsmouseOver. Ele destaca com a cor que eu especifico por um segundo e depois desaparece à cor padrão, um efeito legal, mas não o que vou. Aqui está o meu estilo:
<Style TargetType="ComboBox">
<Style.Triggers>
<Trigger Property="ComboBox.IsMouseOver" Value="True">
<Setter Property = "Background" Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>
O que posso fazer para fazer a cor de fundo ficar?
Solução
O problema é de fato devido ao modelo padrão para o ComboBox. Se você usar Refletor Para abrir a montagem ApresentationFramework.aero, você pode dar uma olhada na classe ButtonChrome. Existe um método chamado OnRernderMouseOverChanged que está escondendo o fundo vermelho.
Embora seja muito trabalho, pelo menos para o ComboBox, você provavelmente desejará substituir o modelo padrão para o ComboBox. Você pode ter a idéia básica de como é o ComboBox Temlpate usando o uso Mostre -me o modelo ou Mistura.
Você pode usar o mesmo estilo para substituir o modelo.
<Style TargetType="{x:Type ComboBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ComboBox}">
<!-- Template Here -->
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Outras dicas
Você pode substituir esse comportamento obtendo uma cópia do modelo padrão do designer do WPF Visual Studio e, em seguida, no estilo ComboBoxreadOnlytoggleButton, comente a seção ButtonCrome e substitua -a por uma borda. Aqui está um link para o site em que encontrei a solução - http://www.scripttscoop.net/t/d346cf01d844/cc-wpf-combobox-mouse-over-color.html
Aqui está o meu trenó de código
<Style x:Key="ComboBoxReadonlyToggleButton" TargetType="{x:Type ToggleButton}">
<Setter Property="OverridesDefaultStyle" Value="true"/>
<Setter Property="IsTabStop" Value="false"/>
<Setter Property="Focusable" Value="false"/>
<Setter Property="ClickMode" Value="Press"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<!-- Replace the ButtonChrome - this eliminated the following
problem: When the mouse was moved over the ComboBox
the color would change to the color defined in ___ but
then would
immediately change to the default Aero blue
gradient background of 2 powder blue colors -
Had to comment out the
below code and replace it as shown
<Themes:ButtonChrome x:Name="Chrome" BorderBrush=" {TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderPressed="{TemplateBinding IsPressed}" SnapsToDevicePixels="true">
<Grid HorizontalAlignment="Right" Width="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}">
<Path x:Name="Arrow" Data="{StaticResource DownArrowGeometry}" Fill="Black" HorizontalAlignment="Center" Margin="3,1,0,0" VerticalAlignment="Center"/>
</Grid>
</Themes:ButtonChrome>-->
<!-- Here is the code to replace the ButtonChrome code -->
<Border x:Name="Chrome" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" SnapsToDevicePixels="true">
<Grid HorizontalAlignment="Right" Width="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}">
<Path x:Name="Arrow" Data="{StaticResource DownArrowGeometry}" Fill="Black" HorizontalAlignment="Center" Margin="3,1,0,0" VerticalAlignment="Center"/>
</Grid>
</Border>
<!-- End of code to replace the Button Chrome -->
Também adicionei algum código para alterar a cor do plano de fundo para o Darkorange - esse código entrou no ControlTemplate (na seção) para o estilo do ComboBox.
<!-- Hover Code - Code that was added to change the ComboBox background
color when the use hovers over it with the mouse -->
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="DarkOrange"></Setter>
</Trigger>
<!-- Hover Code - End -->