Не уверен, что я тут не так делаю.
У меня есть Colors, определенный в ResourceDictionary: Colors.xaml:
Colors
ResourceDictionary
Colors.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Color x:Key="Normal">#FF404040</Color> </ResourceDictionary>
Затем используется в Brushes.xaml:
Brushes.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="Colors.xaml"/> <!-- here I may have more colors--> </ResourceDictionary.MergedDictionaries> <SolidColorBrush x:Key="Color" Color="{StaticResource Normal}" /> <!-- here I may have more brushes--> </ResourceDictionary>
Затем Brushes объединяются в Generic.xaml
Brushes
Generic.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="Brushes.xaml"/> <!-- here I may have more resources--> </ResourceDictionary.MergedDictionaries> </ResourceDictionary>
Теперь, если я использую Brushes, скажем, Border Style, вот так:
Border
Style
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Style x:Key="BorderContainer" TargetType="{x:Type Border}"> <Setter Property="Background" Value="{StaticResource Color}"/> </Style> </ResourceDictionary>
Я должен использовать его как DynamicResource, но если он используется как StaticResource, то я получил эту ошибку во время выполнения:
DynamicResource
StaticResource
{DependencyProperty.UnsetValue}' is not a valid value for property 'Background'
Я хочу использовать StaticResource для кистей везде в моем приложении.
Если вы хотите использовать StaticResource в вашем ResourceDictionary, вам необходимо объединить ResourceDictionary Brushes.xaml с ResourceDictionary, где вы определяете стиль границы, как вы это сделали с Colors.xaml в Brushes.xaml:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <!-- "Include" Brushes --> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="Brushes.xaml" /> </ResourceDictionary.MergedDictionaries> <Style x:Key="BorderContainer" TargetType="{x:Type Border}"> <Setter Property="Background" Value="{StaticResource Color}" /> </Style> </ResourceDictionary>
Для получения дополнительной информации о разнице между Static- и DynamicResource см. этот ответ .