#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}"