Не уверен, правильно ли я понял этот вопрос. Итак, вы хотите, чтобы ваш ComboBox
использовал темную тему, когда его родительский элемент управления использует светлую тему?
Если это так, то это довольно просто. В области элемента управления в пределах его ресурсов добавьте ресурс DarkTheme.
Так сказать, мы получили
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
...
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Теперь почти все в вашем приложении будет использовать светлую тему. Однако, если у нас есть ComboBox
, например:
<ListBox>
<!-- This is just for an example so you would ofc have this defined in the ItemTemplate normally -->
<ListBoxItem>
<ComboBox>
<ComboBox.Resources>
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseDark.xaml" />
</ComboBox.Resources>
<ComboBoxItem Content="A" />
<ComboBoxItem Content="A" />
<ComboBoxItem Content="A" />
</ComboBox>
</ListBoxItem>
<ListBoxItem Content="A" />
<ListBoxItem Content="A" />
</ListBox>
Теперь мы добавляем ресурс BaseDark.xaml
в область действия для ComboBox
, что должно просто заставить его применить к нему темную тему.
![введите здесь описание изображения](https://i.stack.imgur.com/oq4gT.png)
Причина, по которой это работает, заключается в некоторой Brush
магии :) Все элементы управления стилизованы с использованием кистей, которые они запрашивают и находят. Теперь Ресурс с наивысшим приоритетом области имеет приоритет, когда несколько кистей имеют одинаковое имя.
Таким образом, по сути BaseLight.xaml и BaseDark.xaml оба определяют одни и те же кисти с разными цветами.
При этом на основе того, какой ресурс применяется к элементу управления, в конечном итоге определяется, какую тему получает этот элемент управления или его дочерние элементы.
person
Viv
schedule
07.05.2014