2015-07-08 8 views
1

Я пытаюсь использовать ComboBox на основе ToolBar.ComboBoxStyleKey. Он имеет плоский дизайн. Управление по умолчанию не имеет границы, то есть на белом фоне отображается только значок ToggleButton. Как добавить границу для управления, когда фокус не включен в ComboBox?WPF Border для ComboBox

Спасибо!

Нет фокуса:

Combo Box without focus

Mouse парения:

Mouse Hover

ответ

0

Есть бесчисленное множество вариантов.

  1. Нарисуйте прямоугольник вокруг координат combobox (x, y).

  2. Создайте свой собственный combobox, как показано на рисунке: CustomCombowithBorder.

  3. Добавить панель за ней и придать панели границу, имитирующую границу.

  4. и т.д ....

EDIT:

Найдено, что MSDN дает отличный ответ, также показанный в ComboBox Styling.

<Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="ComboBox"> 
     <Grid> 
      <Border x:Name="ContentPresenterBorder"> 
       <Grid> 
        <ToggleButton x:Name="DropDownToggle"/> 
        <ContentPresenter x:Name="ContentPresenter" /> 
        <TextBlock Text=" " /> 
        </ContentPresenter> 
       </Grid> 
      </Border> 
     </Grid> 
     </ControlTemplate> 
    </Setter.Value> 
</Setter> 
1

В WPF есть пограничный контроль, вы можете использовать это для обертывания вашего ComboBox.

<Border Background="GhostWhite" BorderBrush="Gainsboro" BorderThickness="1"> 
    <ComboBox> 
     ... 
    </CombodBox> 
</Border> 

http://www.wpf-tutorial.com/misc-controls/the-border-control/

Вы можете установить BorderThickness согласно если выпадающий имеет фокус или нет.

+0

Спасибо! Теперь я добавил границу. Как я могу изменить BorderThickness при наведении или фокусировке на ComboBox? – Pavel

+0

Если вы используете MVVM, привяжите свою толщину к свойству и измените значение свойства в событии hover/focus вашего комбинированного поля. Если вы не используете MVVM, укажите имя своей границы и измените толщину границы непосредственно в событии. –

+0

Я не использую MVVM. Должен ли я добавить триггер для combobox? \t \t \t Pavel