Xaml Design View не может найти фоновую кисть - PullRequest
0 голосов
/ 12 октября 2011

чтобы очистить мой код, я пытаюсь разделить мой 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}» не является допустимым значением для свойства «Фон». 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 ]

5 голосов
/ 12 октября 2011

Это проблема с StaticResource не так ли.Требуется, чтобы ключ ресурса был разрешен в явном виде с использованием иерархических ресурсов общих \ слитых \ прямых ресурсов.

Существует два варианта ...

объединить Colors.xaml словарь в Styles.xaml

ИЛИ

в Styles.xaml см. Ссылку на меш, используя DynamicResource.

1 голос
/ 11 ноября 2012

Попробуйте

{StaticResource ApplicationPageBackgroundThemeBrush}

для вашего фона строки состояния

1 голос
/ 12 октября 2011

В случае, если ресурсы находятся в разных сборках, чем та, в которой находится 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#details

...