Странное поведение Visual Studio при настройке словаря ресурсов приложения - PullRequest
1 голос
/ 03 сентября 2010

Я пытаюсь установить текущее приложение WPF ResourceDictionary программно.(У меня есть проект WindForms, поэтому для меня это не "App.xaml").

Примечание: Если кто-нибудь знает, как связать эквивалент Application.Resources сElementHost и вся иерархия дочерних элементов управления , это конечная цель здесь.

Я добавил в свой код:

Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("/Middlewerks;component/Resources.xaml", UriKind.RelativeOrAbsolute) });

Теперь он отлично работает в приложениистиль хорош (т.е. фоны гридов красные. Это просто тестовый стиль).

Но если я открою эту форму в конструкторе, Visual Studio сойдет с ума.Все окно использует мой стиль!

Вот скриншот: http://localhostr.com/files/8368cc/Failure.jpg Самое классное то, что я нашел, как редактировать уродливый синий скин Visual Studio 2010.Грустная часть в том, что мои клиенты не будут счастливы, когда они будут развиваться с моим контролем.

Не стесняйтесь попробовать и скажите мне, как я должен реализовать свои ресурсы, не облажаясь.

Код XAML: (показано на скриншоте)

EDIT : Вот мое временное, очень хакерское решение, поэтому я могу продолжать разработку.Действительно, «Application.Current» работает в Visual Studio.

if (Application.Current.MainWindow == null || !Application.Current.MainWindow.Title.EndsWith(" - Microsoft Visual C# 2010 Express"))
{
    Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("/Middlewerks;component/Resources.xaml", UriKind.RelativeOrAbsolute) });
}

1 Ответ

0 голосов
/ 03 сентября 2010

Когда я работал над проектом WinForms, в котором использовались области WPF, я просто использовал MergedDictionaries для ввода необходимых мне ресурсов, когда бы они ни понадобились.

<Window.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="DefaultResourceDictionary.xaml"/>
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
</Window.Resources>

С этим можно сойти? Вы все еще можете поместить код в словарь, если вам нужно сделать больше программно.

Вы можете использовать это на любом уровне на любом элементе. То есть он не должен быть Window, как показано здесь.

...