2015-10-08 2 views
0

Привет всем в SO,WPF ResourceDictionary and Styling

У меня проблема в WPF. У меня есть 2 (или больше в ближайшем будущем) ResourceDictionaries, один из них содержит все шаблоны управления и еще один, который содержит значки и SolidColorBrushes. Поскольку первый ResourceDictionary содержит 2 стиля для каждого элемента управления, я хочу сделать другой Словарь, содержащий цвета и значки, чтобы использовать их в диалогах, что позволяет удалить лишние стили. Я хочу всегда использовать базовый словарь и желаемый цветной словарь, но вот в чем проблема:

Шаблоны не могут получить доступ к цветам в другом словаре. Я попытался следующие методы:

Метод 1: Реферирование как словари в окне

<ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="BaseUIStyle.xaml"/> 
      <ResourceDictionary Source="UIStyles.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 

Метод 2: Реферирование словарь цвета в окне и создания ссылки на словарь шаблона в словаре цвета. Изначально установка была такой же, но наоборот (окно -> база -> цвет)

//Window XAML  
<ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="UIStyles.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 

//Color XAML 
<ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="BaseUIStyle.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 

Позорный .NET 4 Bug, который многие люди столкнулись во время укладки их окна не IMO здесь, потому что приложение имеет .NET 4.5 в качестве целевой среды, и даже второй метод не будет очень глубоким (ошибка произошла, если я понял это правильно при поиске по 3 уровням или глубже).

Спасибо за любую помощь

ответ

0

переместить ваши словари ресурсов на App.xaml, все ссылки в App.xaml будет доступно для любого файла в приложении.

Помните, что ресурсы доступны для того, к чему они добавлены, и к чему-либо под этим, поэтому в приведенном выше примере все, что добавлено в ваше окно, будет иметь доступные ресурсы, IDE может не автозаполнять их, но если они находятся в App.xaml это будет.

Я также не вижу, что Color.xaml ссылается в любом месте.

В зависимости от того, как на верхнем уровне вам нужны BaseUiStyle.xaml и UIStyles.xaml, вы можете получить это в своем App.xaml.

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Color.xaml"/> 
      <ResourceDictionary Source="BaseUIStyle.xaml"/> 
      <ResourceDictionary Source="UIStyles.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 
+0

Я не могу найти App.xaml, возможно, из-за способа построения проекта. UIStyles.xaml содержит цвет. – AlphaNERD

+0

Это приложение WPF? App.xaml является записью по умолчанию в приложении и обычно вызывает MainWindow. Довольно редко, что у вас не будет App.xaml; возможно, файл переименован? Попробуйте найти «StartupUri» и посмотрите, сможете ли вы найти его таким образом. –

+0

Нет результата на самом деле ... – AlphaNERD