Как добавить стиль фокуса к редактируемому ComboBox в WPF - PullRequest
2 голосов
/ 09 октября 2009

Я рассмотрел следующий пример о том, как стилизовать ComboBox, но я не смог создать эффект фокуса при входе в редактируемое поле со списком. Всякий раз, когда ComboBox получает фокус, он должен переходить в режим редактирования, и компонент должен иметь стиль фокуса.

Основная проблема заключается в том, что всякий раз, когда я вхожу в режим редактирования, фокус находится не на ComboBox, а на текстовом подкомпоненте, и я не смог создать Trigger для текстового компонента который изменяет стиль рамки ComboBox, так как я не знаю, как ссылаться на родительский компонент из триггера.

Я пытался добавить ControlTemplate Trigger в TextBox или триггер стиля. Я пытался ссылаться на ComboBox по имени или с помощью опции TemplateBinding, но безуспешно. Простой пример был бы очень признателен.

Ответы [ 3 ]

3 голосов
/ 18 февраля 2010

Привязать IsKeyboardFocusWithin к IsDropDownOpen

<ComboBox ItemsSource="{Binding SortedItems}"
          StaysOpenOnEdit="True"
          IsDropDownOpen="{Binding IsKeyboardFocusWithin, RelativeSource={RelativeSource Self}, Mode=OneWay}" />
1 голос
/ 13 декабря 2010

Установите границу кисти в поле со списком Gotfocus и сделайте его прозрачным в потерянном фокусе:

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;
    }
1 голос
/ 13 декабря 2010
  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;
        }
...