Xaml Design View не может найти фоновую кисть
Чтобы очистить мой код, я пытаюсь разделить мой app.xaml на отдельные словари ресурсов. Это работает во время выполнения, но не во время разработки:
разрезано в app.xaml
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/;component/Theme/Colors.xaml" />
<ResourceDictionary Source="/;component/Theme/Styles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Colors.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<SolidColorBrush x:Key="backgroundBrush" Color="Gold"/>
</ResourceDictionary>
Styles.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="StatusBar">
<Setter Property="Background" Value="{StaticResource backgroundBrush}" />
</Style>
</ResourceDictionary>
Отрезано от MainWindow.xaml
<Window x:Class="test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="test" Width="800" Height="600" >
<StatusBar Name="statusBar" DockPanel.Dock="Bottom">
<StatusBarItem Content="{Binding statusMessage}" />
</StatusBar>
DesignView выдает ошибку: Ошибка 8 '{DependencyProperty.UnsetValue}' не является допустимым значением для свойства 'Background'. C:\Daten\DotNet\test\test\MainWindow.xaml 123
Если я помещу backgroundBrush прямо в app.xaml, вот так:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/;component/Theme/Colors.xaml" />
<ResourceDictionary Source="/;component/Theme/Styles.xaml" />
<ResourceDictionary>
<SolidColorBrush x:Key="backgroundBrush" Color="Gold"/>
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
DesignView не имеет проблем.
Так есть ли способ сообщить DesignView, где найти backgroundBrush, если эта кисть помещена в отдельный словарь ресурсов?
3 ответа
Это проблема с StaticResource
не так ли? Требуется, чтобы ключ ресурса был разрешен в явном виде с использованием иерархических ресурсов совместно используемых \ слитых \ прямых ресурсов.
Есть два варианта...
сливаться Colors.xaml
словарь в Styles.xaml
ИЛИ ЖЕ
в Styles.xaml
сослаться на мусор используя DynamicResource
,
Пытаться
{StaticResource ApplicationPageBackgroundThemeBrush}
для вашего фонового значения строки состояния
В случае, если ресурсы находятся в разных сборках, чем та, где находится MainWindow и один словарь ссылается на другой словарь. В этом случае ссылка не разрешается. Эта ошибка уже сообщается на сайте Microsoft в случае, если ваша целевая платформа - 4.0. Однако они предоставили обходной путь для этого. Просто добавьте пустой стиль в свои словари ресурсов, и он будет работать нормально, как это -
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/;component/Theme/Colors.xaml" />
<ResourceDictionary Source="/;component/Theme/Styles.xaml" />
</ResourceDictionary.MergedDictionaries>
<Style TargetType="{x:Type Window}"/>
</ResourceDictionary>
</Application.Resources>
Для получения дополнительной ссылки, пожалуйста, просмотрите эту ссылку - https://connect.microsoft.com/VisualStudio/feedback/details/555322/global-wpf-styles-are-not-shown-when-using-2-levels-of-references