MouseOver evidenzia lo stile che ritorna al valore predefinito dopo un secondo (causato da Aero?)

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

Domanda

Sto provando a modellare i miei ComboBox per adattarli al resto dell'interfaccia utente, ma sto riscontrando problemi con l'evidenziazione di IsMouseOver. Si evidenzia con il colore che specifico per un secondo e poi ritorna al colore predefinito, un tipo di effetto interessante, ma non quello che sto cercando. Ecco il mio stile:

<Style TargetType="ComboBox">
    <Style.Triggers>
        <Trigger Property="ComboBox.IsMouseOver" Value="True">
            <Setter Property = "Background" Value="Red"/>
        </Trigger>
    </Style.Triggers>
</Style>

Cosa posso fare per mantenere il colore di sfondo?

È stato utile?

Soluzione

Il problema è in effetti dovuto al modello predefinito per ComboBox. Se si utilizza Reflector per aprire il PresentationFramework.Aero assembly è possibile dare un'occhiata a la classe ButtonChrome. Esiste un metodo chiamato OnRenderMouseOverChanged che nasconde lo sfondo rosso.

Anche se richiede molto lavoro, almeno per ComboBox, probabilmente vorrai sovrascrivere il modello predefinito per ComboBox. Puoi avere l'idea di base di com'è la temlpate di ComboBox usando Show Me The Modello o Blend .

Puoi usare il tuo stesso stile per sovrascrivere il modello.

<Style TargetType="{x:Type ComboBox}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ComboBox}">
                <!-- Template Here -->
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Altri suggerimenti

È possibile ignorare questo comportamento ottenendo una copia del modello predefinito da WPF Visual Studio Designer e quindi nello stile ComboBoxReadonlyToggleButton commentare la sezione ButtonChrome e sostituirla con un bordo. Ecco un link al sito in cui ho trovato la soluzione - http://www.scriptscoop.net/t/d346cf01d844/cc-wpf-combobox-mouse-over-color.html

Ecco il mio frammento di codice

<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 -->

Ho anche aggiunto del codice per cambiare il colore di sfondo in DarkOrange - Questo codice è stato inserito in ControlTemplate (nella sezione) per lo stile per 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 -->
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top