为什么使用静态资源会破坏Visual Studio中的设计器?

时间:2016-03-31 14:54:49

标签: c# wpf visual-studio xaml

我在类库中有一个资源字典,它有一堆SolidColorBrush和Control样式。当我确保我设置的样式的所有控件都使用DynamicResource时,它在设计器中工作,但是如果我将它切换为使用StaticResource,则设计器会中断或我的应用程序无法运行......或者两者兼而有之。

这可行

<Image Source="{Binding Image}" Style="{DynamicResource DriveImageStyle}"/>

这打破

<Image Source="{Binding Image}" Style="{StaticResource DriveImageStyle}"/>

给我错误,例如:

  

XamlParseException:提供值   'System.Windows.Markup.StaticResourceHolder'引发了异常。

     

找不到名为'DriveImageStyle'的资源

在资源词典中使用资源时(设置样式的背景颜色)

这可行

<Setter Property="Background" Value="{DynamicResource ButtonBackgroundColour}" />

这打破

<Setter Property="Background" Value="{StaticResource ButtonBackgroundColour}" />

并在设计师中给我错误,例如:

  

抛出异常:'System.Windows.Markup.XamlParseException'中   PresentationFramework.dll

     

其他信息:'{DependencyProperty.UnsetValue}'不是   属性'背景'的有效值。

任何人都可以告诉我为什么它会以这种方式行事吗?

其他信息

在我的视图中,我像这样引用字典:

<UserControl.Resources>
        <ResourceDictionary Source="pack://application:,,,/Styles;component/Resources.xaml" />
    </UserControl.Resources>

我将它们合并到我的类库中,如下所示:

   <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="Colours.xaml"/>
        <ResourceDictionary Source="Buttons.xaml"/>
        <ResourceDictionary Source="Controls.xaml"/>
    </ResourceDictionary.MergedDictionaries>

1 个答案:

答案 0 :(得分:1)

我希望我有时间去测试,但我想说这是我上次直接从用户控件使用时的方式。然而,我通常建议不要反对它,只是在项目的app.xaml或更集中的地方拍打它,除非一个视图真的是唯一需要它的视图。无论哪种方式都是这样的,他们可以对细节有所了解。

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/Styles;component/Resources.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>