2009-10-09 5 views
2

J'ai regardé le suivant example sur la façon de styler le ComboBox, mais je n'ai pas été en mesure de créer un effet de mise au point lorsque j'entre dans une zone de liste déroulante modifiable . Chaque fois que le ComboBox reçoit le focus, il doit passer en mode édition et le composant doit avoir un style de mise au point.Comment ajouter un style de mise au point à un ComboBox modifiable dans WPF

Le problème de base est que chaque fois que je vais dans le mode d'édition, ce n'est pas ComboBox autour qui a fait l'objet, mais le sous-texte et je n'ai pas été en mesure de créer un Trigger sur le composant texte qui modifie la ComboBox style de bordure puisque je ne sais pas comment faire référence au composant parent à partir du déclencheur.

J'ai essayé d'ajouter ControlTemplateTrigger sur le TextBox, ou le déclencheur de style. J'ai essayé de me référer au ComboBox par le nom ou en utilisant l'option TemplateBinding, mais sans aucune chance. Un exemple simple serait très apprécié.

Répondre

3

Bind IsKeyboardFocusWithin à IsDropDownOpen

<ComboBox ItemsSource="{Binding SortedItems}" 
      StaysOpenOnEdit="True" 
      IsDropDownOpen="{Binding IsKeyboardFocusWithin, RelativeSource={RelativeSource Self}, Mode=OneWay}" /> 
1
private void cmbSpecialHandling_GotFocus(object sender, RoutedEventArgs e) 
     { 
      Thickness th = new Thickness(2); 
      cmbSpecialHandling.BorderThickness = th; 
      cmbSpecialHandling.BorderBrush = this.FindResource("TabFocusColor") as SolidColorBrush; 
     } 

     private void cmbSpecialHandling_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) 
     { 
      Thickness th = new Thickness(2); 
      cmbSpecialHandling.BorderThickness = th; 
      cmbSpecialHandling.BorderBrush = this.FindResource("TabFocusColor") as SolidColorBrush; 
     } 

     private void cmbSpecialHandling_LostFocus(object sender, RoutedEventArgs e) 
     { 
      cmbSpecialHandling.BorderBrush = Brushes.Transparent; 
     } 
1

Définir la brosse frontière de combobox dans son Gotfocus et de le rendre transparent perdu le focus:

private void comboBox_GotFocus(object sender, RoutedEventArgs e) 
    { 
     Thickness th = new Thickness(2); 
     comboBox.BorderThickness = th; 
     comboBox.BorderBrush = this.FindResource("TabFocusColor") as SolidColorBrush; 
        or 
    comboBox.BorderBrush = Brushes.Green; 
    } 


    private void comboBox_LostFocus(object sender, RoutedEventArgs e) 
    { 
     comboBox.BorderBrush = Brushes.Transparent; 
    } 
Questions connexes