Mouseover -Markierstil, der nach einer Sekunde zu Standard zurückkehrt (verursacht durch Aero?)
Frage
Ich würde versuchen, meine Comboboxen so zu stylen, dass sie dem Rest der Benutzeroberfläche entsprechen, aber ich habe Probleme mit dem Ismouseover -Hervorhebung. Es zeigt mit der Farbe, die ich für eine Sekunde spezifiziere, und verblasst dann wieder in die Standardfarbe, eine Art cooler Effekt, aber nicht das, was ich wünsche. Hier ist mein Stil:
<Style TargetType="ComboBox">
<Style.Triggers>
<Trigger Property="ComboBox.IsMouseOver" Value="True">
<Setter Property = "Background" Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>
Was kann ich tun, um die Hintergrundfarbe zu machen?
Lösung
Das Problem ist in der Tat auf die Standardvorlage für den Combobox zurückzuführen. Wenn du benutzt Reflektor So öffnen Sie die PräsentationFramework.aero -Assembly Sie können sich die Buttonchrome -Klasse ansehen. Es gibt eine Methode namens OnrendermouseOverchanged, die den roten Hintergrund versteckt.
Obwohl es viel Arbeit ist, möchten Sie zumindest für Combobox wahrscheinlich die Standardvorlage für den Combobox überschreiben. Sie können die grundlegende Vorstellung davon bekommen, wie das Combobox -Temlpat mithilfe der Verwendung ist Zeigen Sie mir die Vorlage oder Mischung.
Sie können denselben Stil verwenden, um die Vorlage zu überschreiben.
<Style TargetType="{x:Type ComboBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ComboBox}">
<!-- Template Here -->
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Andere Tipps
Sie können dieses Verhalten überschreiben, indem Sie eine Kopie der Standardvorlage vom WPF Visual Studio Designer und dann im ComboboxReadOnlyToggleButton -Stil den ButtonChrome -Abschnitt Kommentar und ersetzen Sie sie durch einen Rand aus. Hier ist ein Link zu der Website, auf der ich die Lösung gefunden habe - http://www.scriptscoop.net/t/d346cf01d844/cc-wpf-combobox-mouse-over-color.html
Hier ist mein Code -Snippet
<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 -->
Ich habe auch einen Code hinzugefügt, um die Hintergrundfarbe in Darkorange zu ändern. Dieser Code ging in die ControlTemplate (im Abschnitt) für den Stil für den 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 -->