2012-01-27 5 views
2

У меня есть стиль TextBlock по умолчанию, определенный в App.xaml, который также влияет на цвет текста элементов ComboBox. Теперь, как я могу явно указать цвет текста ComboBox, определенный в моем главном окне? (Я хотел бы сохранить стиль по умолчанию, но имеют цвет выпадающий текст, как, скажем, синий вместо красного ...)Переопределить стиль TextBlock по умолчанию в ComboBox

app.xaml

<Application x:Class="WpfApplication1.App" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     StartupUri="MainWindow.xaml"> 
<Application.Resources> 
    <Style TargetType="{x:Type TextBlock}"> 
     <Setter Property="Foreground" Value="Red" /> 
    </Style> 
</Application.Resources> 

MainWindow.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"> 
<Grid> 
    <ComboBox Name="comboBox1" SelectedIndex="0" HorizontalAlignment="Left" VerticalAlignment="Top"> 
     <ComboBoxItem Content = "Item1"/> 
     <ComboBoxItem Content = "Item2"/> 
     <ComboBoxItem Content = "Item3"/> 
    </ComboBox> 
</Grid> 

Вещи, которые я пробовал:

  1. Set Combobox.Foreground
  2. Set TextElement.Foreground
  3. Set TextBlock.Foreground
  4. Определить другой неявный стиль TextBlock в ComboBox.Resources
  5. Определение другой неявный стиль TextBlock в Grid.Resources
  6. Определите еще один неявный стиль TextBlock в Window.Resources

ответ

3

Наиболее неявные стили TextBlock остановится на границах управления, если не поставить их в Application.Resources

Например, размещая свой стиль в Window.Resources сделает это относится ко всем <TextBlock> объектов, но не к тексту внутри другого контроля Шаблоны, такие как ComboBox или Button

Я хотел бы предложить переместить свой стиль в Window.Resources, а затем укладка элементов ComboBox, чтобы иметь любой цвет переднего плана вы хотите.

<ComboBox.Resources> 
    <Style TargetType="{x:Type ComboBoxItem}"> 
     <Setter Property="Foreground" Value="Blue" /> 
    </Style> 
</ComboBox.Resources> 

Если вы хотите сохранить его в Application.Resources, то я подозреваю, что вам нужно, чтобы отследить, что x:Static кисть ключ используется для установки TextBlock.Text цвет и перезаписать, что в вашем ComboBox.Resources

+0

Я попытался добавить еще один стиль TextBlock в ресурсы combobox. к сожалению, это не имело никакого эффекта. –

+0

Я редактировал вопрос, чтобы включить некоторые вещи, которые я уже пробовал –

+0

@ErenErsonmez См. Мой отредактированный ответ. Я не заметил, что у вас был ваш стиль в «Application.Resources», а не 'Window.Resources' – Rachel

1

Вы должны использовать триггеры на ComboBoxItem

<Style TargetType="{x:Type ComboBoxItem}"> 
    <Style.Triggers> 
     <Trigger Property="ComboBoxItem.IsMouseOver" Value="true"> 
      <Setter Property="Foreground" Value="Red"/> 
     </Trigger> 

     <Trigger Property="ComboBoxItem.IsMouseOver" Value="false"> 
      <Setter Property="Foreground" Value="Blue"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

И если вы хотите сохранить его статический то

<Style TargetType="{x:Type ComboBoxItem}"> 
    <Setter Property="Foreground" Value="Blue"/> 
</Style> 
+1

, это не работает, когда неявный стиль находится в App.xaml. –

+0

Затем вам придется использовать x: Key, переопределить шаблон ComboBox по умолчанию, применить шаблон в стиле и применить стиль ComboBox – MyKuLLSKI

Смежные вопросы