Как использовать словари ресурсов в библиотеке пользовательских элементов управления?

#wpf #dictionary #dll #custom-controls #resourcedictionary

#wpf #словарь #dll #пользовательские элементы управления #resourcedictionary

Вопрос:

Я создал словарь ресурсов с некоторыми часто используемыми кистями.

 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <SolidColorBrush x:Key="GrayColor1" Color="#f2f2f2"/>
    <SolidColorBrush x:Key="GrayColor2" Color="#e5e5e5"/>
    <SolidColorBrush x:Key="GrayColor3" Color="#d9d9d9"/>
    ...
</ResourceDictionary>
 

Я хочу использовать их во многих элементах управления в библиотеке пользовательских элементов управления, но я не нашел способа сделать их доступными для элементов управления.
В обычном приложении я помещу их в App.xaml, но в библиотеке нет файла App.xaml.
Итак, как можно использовать словарь ресурсов в библиотеке?

Я уже безуспешно пытался объединить словарь в /Themes/Generic.xaml следующим образом:

 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="/MyControls;component/DefaultBrushes.xaml"/>
        <ResourceDictionary Source="/MyControls;component/Styles/CustButton.xaml"/>
        <ResourceDictionary Source="/MyControls;component/Styles/CustTextBox.xaml"/>
        ...
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
 

Но ссылка на ресурсы приводит к нулевой ссылке (кажется, что в Generic.xaml могут быть объединены только шаблоны элементов управления).

Ответ №1:

Вы должны объединить их в каждом элементе управления или в самом верхнем элементе управления, если у вас есть вложенные элементы управления.

 <UserControl.Resources>
   <ResourceDictionary>
       <ResourceDictionary.MergedDictionaries>
           <ResourceDictionary Source="pack://Application:,,,/MyControls;component/Styles/CusTextBox.xaml"/>
       </ResourceDictionary.MergedDictionaries>
   </ResourceDictionary>
</UserControl.Resources>
 

Ответ №2:

Вы все еще можете создавать объединенные словари в своих приложениях App.xaml, но в библиотеке элементов управления, где вы хотите получить доступ к этим кистям, попробуйте использовать DynamicResource вместо StaticResource .

 Background="{DynamicResource GrayColor1}"