WPF 找不到静态资源

WPF cannot find static resource

我在资源字典中定义了一个元素,如下所示:

<SolidColorBrush x:Key="ChromeBrush" Color="Red"  />

我正在尝试将其用作 Border 的背景,如下所示:

<Style TargetType="ToolBar">
    <Setter Property="SnapsToDevicePixels" Value="true" />
    <Setter Property="OverridesDefaultStyle" Value="true" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ToolBar">
                <Border x:Name="Border" Background="{StaticResource ChromeBrush}">
                    <DockPanel>
                        <ToolBarPanel x:Name="PART_ToolBarPanel" IsItemsHost="true" Margin="0,1,2,2" />
                    </DockPanel>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

对于此特定用法,我收到一条错误消息 Cannot find resource named 'ChromeBrush'. Resource names are case sensitive

如果我将静态资源使用更改为 Red,一切都会按预期工作。

托管工具栏的用户控件是在运行时动态创建的(通过 Activator.CreateInstance(...))- 如果有帮助,用户控件的 XAML 是:

<framework:PanelBase x:Class="Framework.UserControl1"
            namespaces omitted for brevity
            >

    <framework:PanelBase.ToolbarTemplate>
        <ToolBar />
    </framework:PanelBase.ToolbarTemplate>

    <!-- other controls -->
</framework:PanelBase>

奇怪的是,画笔在项目的其他地方以完全相同的方式在各种控件中多次使用,没有任何问题(有些用法实际上是在托管用户控件上)。在上面的代码片段中,Visual Studio 以正确的颜色为资源下划线,因此 能够解析它。

更新: 在想知道这是否与 UserControl1 class 在资源字典的不同(动态加载)程序集中这一事实有关之后,我尝试在另一个控件上使用该资源并且它工作正常......专门用于使用该工具栏样式。

<framework:PanelBase x:Class="Framework.UserControl1"
            namespaces omitted for brevity
            >

    <framework:PanelBase.ToolbarTemplate>
        <ToolBar />
    </framework:PanelBase.ToolbarTemplate>

    <Border Background="{StaticResource ChromeBrush}">
        <!-- WORKS FINE! -->
    </Border>
</framework:PanelBase>

有谁知道为什么在运行时会针对此特定用途发生这种情况?它是动态创建的事实与它有什么关系吗?

提前致谢, 斯科特

我猜测它不起作用的原因是 WPF 如何以及何时查找和绑定静态资源的一些怪癖。我的猜测是它更多地与你如何加载程序集而不是你如何实例化对象(通过 Activator.CreateInstance 的反射)有关,但我可能完全不了解,更熟悉 WPF 内部结构的人必须肯定地说.

但是,解决方法应该很简单:改为使用 DynamicResourceDynamicResource 更像普通绑定,解析引用应该没有问题。

我已经点击 link 很多次了,但还是不行。每次答案都是我在键名后添加一个 space,如下所示:x:Key="Name " 我经常想念这个,而且我似乎也从未学过。