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?

Foi útil?

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 -->
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top