Mouseover -Markierstil, der nach einer Sekunde zu Standard zurückkehrt (verursacht durch Aero?)

StackOverflow https://stackoverflow.com/questions/250622

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?

War es hilfreich?

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 -->
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top