Ссылка на ресурс в ResourceDictionary из другого ResourceDictionary в Silverlight
У меня есть следующий набор кода в моем App.xaml:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Client.Common;component/Theme/Brushes.xaml"/>
<ResourceDictionary Source="/Client.Common;component/Theme/Fonts.xaml"/>
<ResourceDictionary Source="/Client.Common;component/Theme/CoreStyles.xaml"/>
<ResourceDictionary Source="/Client.Common;component/Theme/SdkStyles.xaml"/>
<ResourceDictionary Source="/Client.Common;component/Theme/MyAppName.xaml"/>
<ResourceDictionary Source="/Client.Common;component/Controls/NavigationPanel.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
NavigationPanel.xaml содержит стиль, который выглядит следующим образом:
<Style x:Key="NavigationPanelListBox" TargetType="ListBox">
<Setter Property="Background" Value="{StaticResource DarkBackground}" />
<Lots of XAML>
</Style>
{StaticResource DarkBackground} определен в файле Brushes.xaml (то есть в первом словаре ресурсов). Определяется как
<SolidColorBrush x:Key="DarkBackground" Color="#FF707176" />
в словаре ресурсов.
Во время выполнения я получаю следующую ошибку:
Cannot find a Resource with the Name/Key DarkBackground [Line: 16 Position: 44]
Номера строк и положение ссылаются на словарь ресурсов NavigationPanel.xaml в app.xaml.
Я могу ссылаться на кисть из других элементов управления, но не из словаря ресурсов.
Почему я не могу ссылаться или почему он не разрешает ссылку на ресурс, который выше в иерархии словаря объединенных ресурсов? Что мне здесь не хватает?
3 ответа
Вы ссылаетесь на DarkBackground
чистить любой из ресурсов в NavigationPanel
толковый словарь?
Если вы, возможно, вам нужно объединить Brushes
словарь ресурсов в NavigationPanel
толковый словарь.
Так в словаре NavigationPanel.
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Client.Common;component/Theme/Brushes.xaml" />
</ResourceDictionary.MergedDictionaries>
Вы можете включить один словарь в другой (например, "использование" в C#) следующим образом:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
xmlns:uriMapper="clr-namespace:System.Windows.Navigation;assembly=System.Windows.Controls.Navigation"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:Controls="clr-namespace:APC.IKM.UI.SL.Controls"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Brushes.xaml"/>
<ResourceDictionary Source="Fonts.xaml"/>
<ResourceDictionary Source="CoreStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
Это то, что вы ищите? Шаблон проекта Cosmopolitan / Metro имеет хороший пример этого...
Полный ответ - ответ Эрика на этом сайте: https://social.msdn.microsoft.com/forums/windowsapps/en-US/2be9a5f6-5313-448d-a9d9-296bac42215e/using-style-defined-in-merged-dictionary-from-another-merged-dictionary?forum=wpdevelop.
Brushes.xaml и NavigationPanel.xaml анализируются независимо, а затем добавляются в объединенный словарь ресурсов приложения, чтобы они ничего не знали друг о друге.