MouseOver que resalta el estilo y vuelve a su valor predeterminado después de un segundo (¿Causado por Aero?)

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

Pregunta

Intenté diseñar mis ComboBoxes para que coincidan con el resto de la interfaz de usuario, pero tengo problemas con el resaltado de IsMouseOver. Se resalta con el color que especifico por un segundo y luego se desvanece al color predeterminado, una especie de efecto genial pero no para lo que estoy buscando. Aquí está mi estilo:

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

¿Qué puedo hacer para que el color de fondo permanezca?

¿Fue útil?

Solución

El problema se debe a la plantilla predeterminada para el ComboBox. Si utiliza Reflector para abrir PresentationFramework.Aero ensamblaje, puede echar un vistazo a La clase ButtonChrome. Existe un método llamado OnRenderMouseOverChanged que oculta el fondo rojo.

Aunque es mucho trabajo, al menos para ComboBox, es probable que desee anular la plantilla predeterminada para ComboBox. Puede tener una idea básica de cómo es el temlpate ComboBox usando Show Me Plantilla o Blend .

Puedes usar tu mismo estilo para anular la plantilla.

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

Otros consejos

Puede anular este comportamiento obteniendo una copia de la plantilla predeterminada de WPF Visual Studio Designer y luego en el estilo ComboBoxReadonlyToggleButton comente la sección ButtonChrome y sustitúyala por un borde. Aquí hay un enlace al sitio donde encontré la solución - http://www.scriptscoop.net/t/d346cf01d844/cc-wpf-combobox-mouse-over-color.html

Aquí está mi fragmento 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 -->

También agregué algo de código para cambiar el color de fondo a DarkOrange - Este código se incluyó en ControlTemplate (en la sección) para el Estilo de 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 -->
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top