2014-10-15 2 views
2

Я создаю проект библиотеки классов, который будет содержать пользовательские элементы управления WPF. Мое требование состоит в том, что все элементы управления имеют одинаковый стиль. Мой проект выглядит следующим образом:Использование стилей словаря ресурсов в моем проекте библиотеки классов без слияния словарей

enter image description here

Вещи, которые я сделал для того, чтобы решить эту проблему:

  1. Добавлена ​​все ссылки, необходимые приложения WPF System.Xaml, WindowsBase и т.д .. так что я могу иметь элементы управления wpf в моем проекте библиотеки классов.
  2. В AssemblyInfo.cs Я добавил:

    [assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)]

  3. Добавлено ResourceDictionary1.xaml К проекту, добавив стиль.

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <SolidColorBrush x:Key="Brush1" Color="#FF19199E"/>
    </ResourceDictionary>

  4. Теперь, если я хочу использовать стиль на моем UserControl1.xaml я:

    <UserControl.Resources> 
        <ResourceDictionary> 
         <ResourceDictionary.MergedDictionaries> 
          <ResourceDictionary Source="ResourceDictionary1.xaml" /> 
         </ResourceDictionary.MergedDictionaries> 
        </ResourceDictionary> 
    
    </UserControl.Resources> 
    
    <Grid > 
        <Rectangle Fill="{StaticResource Brush1}" /> 
    </Grid> 
    

Я знаю, что это горе rks отлично, но вот улов. Каждый раз, когда я создаю новый userControl, мне придется объединить словарь. В обычном WPF-приложении я мог бы просто объединить словарь один раз на App.xaml, и я смогу использовать этот словарь для всего моего приложения. Как я могу избежать слияния словаря каждый раз при создании нового userControl? Если я планирую добавить новый словарь ресурсов, мне придется перейти ко всем userControls и слить другой словарь. Может быть, я написал заголовок вопроса неправильно, и мой вопрос должен был, как я могу добавить App.xaml файл в проект библиотеки классов

+0

Вы могли бы попытаться положить общие ресурсы для сборки в 'Themes \ Generic.xaml' словаря ресурсов (с Build Action установлен на«страницы»). Именно там WPF ожидает, что по умолчанию будут использоваться стандартные библиотеки, не зависящие от темы, поэтому эти ресурсы должны автоматически загружаться в ваше приложение. Как правило, этот файл фактически не объявляет никаких ресурсов, но использует «MergedDictionaries» для загрузки ресурсов из других файлов. –

+0

Почему у вас нет проекта wpf в вашем решении и не добавляйте свою библиотеку классов в качестве ссылки. Оттуда вы можете сделать вызов в пользовательском или обычном окне в качестве стартового экрана –

ответ

-1

Вы должны заменить значение источника ResourceDictionary1.xaml как следующие:

Source="pack://application:,,,/ControlsDLL;component/ResourceDictionary1.xaml"> 

или просто в качестве следующего:

<UserControl.Resources> 
    <ResourceDictionary Source="pack://application:,,,/ControlsDLL;component/ResourceDictionary1.xaml"></ResourceDictionary> 
</UserControl.Resources> 
+0
Смежные вопросы