Этот вопрос можно посмотреть следующим образом: как я могу заставить ComboBox использовать стиль TextBox, отличный от остальной части моего пользовательского интерфейса?
Ответ таков: создайте вложенное свойство, которое применяет другой стиль, затем используйте стиль ComboBox для применения присоединенного свойства.
Сначала стиль ComboBox, так что вы увидите, куда он идет:
<Style TargetType="ComboBox">
<Setter Property="local:MyCustomStyler.Style1">
<Setter.Value>
<Style TargetType="TextBox">
<Setter Property="Background" Value="Black" />
</Style>
</Setter.Value>
</Setter>
</Style>
Теперь, чтобы это работало, вам нужно определить класс MyCustomStyler, который будет выглядеть примерно так:
public class MyCustomStyler
{
public static Style GetStyle1(DependencyObject obj) { return (Style)obj.GetValue(Style1Property); }
public static void SetStyle1(DependencyObject obj, Style value) { obj.SetValue(Style1Property, value); }
public static readonly DependencyProperty Style1Property = DependencyProperty.RegisterAttached("Style1", typeof(Style), typeof(MyCustomStyler), new PropertyMetadata
{
PropertyChangedCallback = (obj, e) =>
{
var element = obj as FrameworkElement;
var style = e.NewValue as Style;
element.Resources[style.TargetType] = style;
}
});
}
Способ, которым это работает, заключается в том, что каждый раз, когда вы устанавливаете присоединенное свойство Style1 для FrameworkElement (например, ComboBox), он добавляет стиль к ресурсам под ключом по умолчанию. Таким образом, всякий раз, когда вышеуказанный Стиль применяется к ComboBox, внутренний стиль TextBox будет добавлен к ресурсам ComboBox, в результате чего TextBox получит этот стиль.
Отсюда легко достичь того, что вы ищете: просто поместите стиль ComboBox в свой App.xaml вместе с вашим собственным стилем TextBox, и все готово.