2013-11-21 4 views
1

Я в настоящее время занимаюсь дизайном ComboBox, чтобы выглядеть как в Visual Studio (наряду с цветовой тематикой). Я сделал большую часть стиля, но остановился на ContentPresenter, отображая текущий выбранный объект.Как стиль ContentPresenter в ComboBox?

Кусок XAML выглядит следующим образом:

<ContentPresenter Margin="2" IsHitTestVisible="False" VerticalAlignment="Center" HorizontalAlignment="Stretch" 
        Name="ContentSite" 
        ContentTemplate="{TemplateBinding ComboBox.SelectionBoxItemTemplate}" 
        Content="{TemplateBinding ComboBox.SelectionBoxItem}" /> 

Проблема в том, что по умолчанию SelectionBoxItemTemplate, кажется, игнорирует значение переднего плана ComboBox в:

<ComboBox Margin="4" SelectedIndex="0" Foreground="Red"> 
    <ComboBoxItem>First</ComboBoxItem> 
    <ComboBoxItem>Second</ComboBoxItem> 
    <ComboBoxItem>Third</ComboBoxItem>     
</ComboBox> 

enter image description here

Первый не редактируется, SelectionBoxItemTemplate пинает и устанавливает цвет текста в черный (хотя Foreground устанавливается вручную на красный и по стилю на другой нечерный цвет).

Как передать текущий цвет переднего плана на ContentPresenter? Если я не могу, где я могу найти рабочую замену для SelectionBoxItemTemplate? (работает, с точки зрения того, что он будет корректно работать для всех типов предметов в ComboBox)

ответ

1

Это случилось, что другой пользователь задал тот же вопрос сегодня.

Вместо копии вставляемого все, чтобы здесь я предлагаю вам прочитать мой ответ там:

Set Style for all elements inside ContentPresenter

Вот ссылка на учебник о том, как решать эти вопросы наследования стилей:

http://blogs.msdn.com/b/wpfsdk/archive/2009/08/27/implicit-styles-templates-controls-and-frameworkelements.aspx

0

Не думаю, что он игнорирует цвет Foreground. Если добавить (нормальный) ComboBox контроля как следующие строки в XAML ...:

<ComboBox Foreground="Red"> 
    <ComboBoxItem>One</ComboBoxItem> 
    <ComboBoxItem>Two</ComboBoxItem> 
    <ComboBoxItem>Three</ComboBoxItem> 
    <ComboBoxItem>Four</ComboBoxItem> 
</ComboBox> 

... вы увидите, что установка Foregroundделают изменения выбранного текста элемента. Я думаю, что, возможно, ваша проблема лежит в ControlTemplate. Теперь я не могу быть уверен на 100%, но я бы подумал, что ваш ContentPresenter должен выглядеть следующим образом, вместо:

<ContentPresenter Margin="2" IsHitTestVisible="False" VerticalAlignment="Center" 
    HorizontalAlignment="Stretch" Name="ContentSite" ContentTemplate="{TemplateBinding 
    SelectionBoxItemTemplate}" Content="{TemplateBinding SelectionBoxItem}" /> 
Смежные вопросы