Как сопоставить пользовательский элемент управления WPF с темой приложения, если тема приложения не является темой по умолчанию? - PullRequest
0 голосов
/ 22 февраля 2011

Я делаю пользовательский элемент управления, полученный из 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).

Кто-нибудь может указать мне правильное направление?Или то, что я пытаюсь сделать, не возможно?Спасибо!

Ответы [ 2 ]

0 голосов
/ 29 апреля 2011

Это всего лишь предположение, но что если вы использовали вместо него DynamicResource?

0 голосов
/ 22 февраля 2011

Вы указали правильные настройки для атрибута ThemeInfo для AssemblyInfo.cs?

...