2015-02-21 23 views
6

Quando il mouse passa con il mouse sul mio ComboBox, ottengo una coppia di colori blu/blu chiaro terribile per il backgroung del mio ComboBox. Ho provato le soluzioni qui: ComboBox Mouse over color, WPF Combobox Mouse Over, How to style ComboBox Background on Mouse Hover? o WPF combobox default hover color on togglebutton, ma non cambia nulla, ottengo ancora i colori di default mentre si passa il mouse.C# WPF ComboBox Mouse sul colore

Qualche suggerimento?

Grazie a tutti in anticipo, Demasiado.

ecco il codice XAML:

<Window x:Class="Homepage.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:sys="clr-namespace:System;assembly=mscorlib" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    <Window.Resources> 
     <Storyboard x:Key="TileZoomIn"> 
      <ThicknessAnimation Storyboard.TargetProperty="Margin" From="10" To="1" Duration="0:0:0.1"/> 
     </Storyboard> 
     <Storyboard x:Key="TileZoomOut"> 
      <ThicknessAnimation Storyboard.TargetProperty="Margin" From="1" To="10" Duration="0:0:0.1"/> 
     </Storyboard> 
     <DropShadowEffect x:Key="DropShadowEffect" BlurRadius="20" Opacity="1" ShadowDepth="0" Color="White"/> 
    </Window.Resources> 

    <Grid ShowGridLines="True"> 
     <ComboBox Name="comboBoxTRIG" FontSize="40" Width="210" Height="98" HorizontalAlignment="Left" HorizontalContentAlignment="Center" Margin="40,-180,0,256" Background="Transparent" BorderBrush="Transparent" Foreground="White" BorderThickness="0"> 
      <ComboBox Margin="25" Width="130" Height="50"> 
       <ComboBox.Resources> 
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green"/> 
       </ComboBox.Resources> 
      </ComboBox> 
     </ComboBox> 
    </Grid> 
</Window> 
+1

inserisci il tuo codice XAML anche –

+0

Benvenuti in un buon inizio su SO: questo è un esempio di ricerca ben condotta e una ben formattata estion. – Sabuncu

+0

Hai qualche dizionario di risorse nella tua app.xaml? Forse sostituendo lo stile predefinito per la tua casella combinata? Inoltre, perché una casella combinata contiene una casella combinata? –

risposta

2

è possibile escludere SystemColors.HighlightBrushKey nell'ambito ComboBox:

<ComboBox.Resources> 
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green"/> 
</ComboBox.Resources> 

sample

l'intera XAML può essere qualcosa di simile:

<Grid> 
    <ComboBox Margin="25" Width="130" Height="50"> 
     <ComboBox.Resources> 
      <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green"/> 
     </ComboBox.Resources> 
     <ComboBox.ItemsSource> 
      <Binding Path="Collection" Source="{StaticResource viewmodel}"/> 
     </ComboBox.ItemsSource> 
    </ComboBox> 
</Grid> 

un follow-up al tuo commento:

ignorare il viewmodel e la mia ItemSource si dovrebbe utilizzare il proprio, questo era solo per la dimostrazione.

come per i suoi commenti su

non ho potuto ottenere nulla di lavorare

vorrei suggerire che verrà creato un nuovo progetto e di prova solo che questa XAML (con l'ItemSource ovviamente) e vedi se riesci a ottenere il risultato che desideri. quando lo avrai, puoi passare al tuo vero progetto e vedere dove cambiano gli stili e dove si trova il problema.

EDIT # 2:

Al fine di cambiare il colore del ToggleButton credo sia meglio per ignorare l'intero ComboBox Style.

enter image description here

ho usato il

<ControlTemplate x:Key="ComboBoxToggleButton" 
       TargetType="{x:Type ToggleButton}"> 

Il resto del codice e lo stile tratto da here.

ti consiglio di leggere anche this.

+0

Il mio XAML è già codificato in questo modo, non funziona. L'unica differenza è che non ho il tag . Ma quando scrivo dice che non conosce "viewmodel". Ho provato eveything che ho trovato su StackOverflow, non ho potuto ottenere nulla per funzionare. – Encore

+1

Così ho fatto, nuovo progetto vuoto, ho appena copiato la riga che hai scritto sopra. Ancora nessun progresso, colore di evidenziazione bicolore (blu) predefinito, qualunque cosa provi. A proposito, non so come menzionare il mio viewmodel, quindi ho cancellato il blocco . Qualche suggerimento? – Encore

+0

quando parli di quella evidenziazione di colore blu, si trova sull'elemento selezionato o sul pulsante stesso?puoi postare la XAML e CS del nuovo progetto che hai realizzato? –

0

Non c'è nessun elemento nel mio ComboBox nel progetto di test. Passo il mouse sopra di esso e l'intero controllo è blu. Ecco l'cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 

namespace WpfApplication1 
{ 
    /// <summary> 
    /// Logique d'interaction pour MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 
    } 
} 

Ecco l'XAML:

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <ComboBox Name="comboBoxTRIG" FontSize="40" Width="210" Height="98" HorizontalAlignment="Left" HorizontalContentAlignment="Center" Margin="42,38,0,184" Background="Red" BorderBrush="Transparent" Foreground="White" BorderThickness="0"> 
      <ComboBox Width="130" Height="50"> 
       <ComboBox.Resources> 
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green"/> 
       </ComboBox.Resources> 
      </ComboBox> 
     </ComboBox> 

    </Grid> 
</Window> 
3

tuo problema nasce dal ButtonChrome nel modello del ToggleButton.Rimuovilo dal ToggleButton.

ComboBox -> ToggleButton -> ButtonChrome 

Passi:

1) Miscela aperta espressione e modificare una copia dello stile di ComboBox, questo vi darà lo stile del ComboBox + E 'Modello e tutti i suoi TemplateParts, Tra di loro è la problematica ToggleButton.

2) Individuare il ToggleButton ed è Style denominato "ComboBoxReadonlyToggleButton".

3) In "ComboBoxReadonlyToggleButton" sostituire le Themes:.! ButtonChrome con un Border (come mostrato nel blocco 3'rd di codice qui sotto)

modello predefinito del ComboBox (semplificato):

<ControlTemplate TargetType="{x:Type ComboBox}"> 
    <Grid x:Name="MainGrid" SnapsToDevicePixels="true">         
     <Popup x:Name="PART_Popup"> 
      ..... 
     </Popup> 
     <ToggleButton Style="{StaticResource ComboBoxReadonlyToggleButton}"/> 
     <ContentPresenter ... /> 
    </Grid>      
</ControlTemplate> 

Il pulsante di selezione Style + Template (semplificato!).

<Style x:Key="ComboBoxReadonlyToggleButton" TargetType="{x:Type ToggleButton}">  
    <Setter Property="Background" Value="Transparent"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ToggleButton}"> 
       <Themes:ButtonChrome x:Name="Chrome" ....> 
        <Grid> 
         <Path x:Name="Arrow" /> 
        </Grid> 
       </Themes:ButtonChrome> 
      </ControlTemplate>    
     </Setter.Value> 
    </Setter> 
</Style> 

Quello che dovete fare è quello di ignorare il modello predefinito ComboBox e modificare lo stile del pulsante di commutazione, sostituendo ButtonChrome con un bordo:

<Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type ToggleButton}"> 
       <Border x:Name="Chrome" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" SnapsToDevicePixels="true"> 
       <Grid> 
        <Path x:Name="Arrow" /> 
       </Grid> 
      </Border>    
     </ControlTemplate> 
    </Setter.Value> 
</Setter> 
+0

Dice che non conosce "DownArrowGeometry". Hai scritto 3 esempi di codice, quindi devo copiare il primo e il terzo, giusto? – Encore

+0

Riconosce "..." ?? –

+0

non si copia nulla. è stato semplificato con un "!" quindi è davvero semplificato. google: sovrascrive lo stile predefinito e il modello wpf. e cambia il modello –

0

Ridefinire il modello comboxItem nelle risorse della finestra

<Style TargetType="{x:Type ComboBoxItem}" 
       BasedOn="{StaticResource {x:Type ComboBoxItem}}"> 
      <Setter Property="Template"> 
       <Setter.Value> 

        <ControlTemplate TargetType="{x:Type ComboBoxItem}"> 
         <Border Background="{TemplateBinding Background}" 
           BorderBrush="{TemplateBinding BorderBrush}" 
           BorderThickness="{TemplateBinding BorderThickness}" 
           Margin="{TemplateBinding Margin}" 
           Padding="{TemplateBinding Padding}"> 
          <ContentPresenter Margin="{TemplateBinding Margin}" 
                VerticalAlignment="{TemplateBinding VerticalAlignment}" 
                HorizontalAlignment="{TemplateBinding HorizontalAlignment}"/> 
         </Border> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 

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

     </Style>