0

为了清理我的代码,我试图将我的 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>

颜色.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>

样式.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:\Datan\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,如果这个画笔被放置到一个单独的资源字典中?

4

3 回答 3

5

那是StaticResource不是它的问题。它需要使用分层的共享\合并\直接资源字典显式解析资源键。

有两种选择...

合并Colors.xaml字典Styles.xaml

或者

Styles.xaml 使用DynamicResource.

于 2011-10-12T13:16:00.077 回答
1

如果资源与 MainWindow 所在的程序集位于不同的程序集中,并且一个字典引用另一个字典。在这种情况下,参考没有解决。如果您的目标框架是 4.0,则此错误已在 Microsoft 站点上报告。但是,他们为此提供了解决方法。只需在您的资源字典中添加空样式,它就会像这样正常工作 -

<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 #细节

于 2011-10-12T13:30:15.583 回答
1

尝试

{StaticResource ApplicationPageBackgroundThemeBrush}

为您的状态栏背景值

于 2012-11-11T19:19:09.540 回答