Я делаю пользовательский элемент управления, полученный из ComboBox, и у меня возникли некоторые трудности с тематикой.Я могу заставить его принять текущую тему ОС без каких-либо затруднений, но когда я явно загружаю новую тему в свой App.xaml, мой производный элемент управления по-прежнему отображается с темой ОС.
Я могу воспроизвестипроблема с минимальным набором кода:
public class MyComboBox : ComboBox
{
static MyComboBox()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(MyComboBox), new FrameworkPropertyMetadata(typeof(MyComboBox)));
}
}
А затем в Themes / generic.xaml:
<Style TargetType="local:MyComboBox" BasedOn="{StaticResource {x:Type ComboBox}}">
</Style>
Пока все хорошо - MyComboBox отображается правильно и соответствует текущемуtheme.
Но затем, когда я добавляю в свой App.xaml:
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/PresentationFramework.Luna;V3.0.0.0;31bf3856ad364e35;component\themes/luna.normalcolor.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
... обычный ComboBox будет отображать Luna Chrome, но MyComboBox продолжит отображать текущую тему (Aero, в моем случае, но я тоже тестировал с Classic).
Я попытался добавить тег для MyComboBox в Themes / luna.normalcolor.xaml и другие файлы XAML темы, без эффекта - загружается только из generic.xaml, независимо от того, какую тему я указал в App.xaml. (ошибка с ThemeInfoAttribute в моем тестовом приложении).
Я подтвердил, что он загружает стиль из aero.normalcolor.xaml (тема, которую использует моя ОС), а не из luna.normalcolor.xaml (тема, которую я указал в моем App.xaml).
Кто-нибудь может указать мне правильное направление?Или то, что я пытаюсь сделать, не возможно?Спасибо!