C# WPF找不到静态资源
我在资源字典中定义了一个元素,如下所示:C# WPF找不到静态资源,c#,wpf,wpf-controls,C#,Wpf,Wpf Controls,我在资源字典中定义了一个元素,如下所示: <SolidColorBrush x:Key="ChromeBrush" Color="Red" /> 对于这个特定用法,我得到一个错误,说找不到名为'ChromeBrush'的资源。资源名称区分大小写 如果我将静态资源使用更改为justRedall,则一切正常 托管工具栏的用户控件正在运行时动态创建(通过Activator.CreateInstance(…))-如果有帮助,用户控件的XAML是: <framework:PanelB
<SolidColorBrush x:Key="ChromeBrush" Color="Red" />
对于这个特定用法,我得到一个错误,说找不到名为'ChromeBrush'的资源。资源名称区分大小写
如果我将静态资源使用更改为justRed
all,则一切正常
托管工具栏的用户控件正在运行时动态创建(通过Activator.CreateInstance(…)
)-如果有帮助,用户控件的XAML是:
<framework:PanelBase x:Class="Framework.UserControl1"
namespaces omitted for brevity
>
<framework:PanelBase.ToolbarTemplate>
<ToolBar />
</framework:PanelBase.ToolbarTemplate>
<!-- other controls -->
</framework:PanelBase>
奇怪的是,笔刷在项目的其他地方以完全相同的方式在不同的控件中使用了很多次,没有任何问题(一些用法实际上是在宿主用户控件上)。在上面的代码片段中,VisualStudio以正确的颜色为资源加下划线,以便能够解析它
更新:
想知道这是否与UserControl1类位于与资源字典不同的(动态加载的)程序集中有关后,我尝试在另一个控件上使用该资源,但效果很好。。。与该工具栏样式特别相关的内容
<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>
有人知道为什么在运行时会发生这种情况吗?它是动态创建的,这和它有什么关系吗
提前感谢,,
Scott我猜测它不起作用的原因是WPF查找和绑定静态资源的方式和时间有些奇怪。我的猜测是,与实例化对象(通过
Activator.CreateInstance
的反射)相比,它更多地与加载程序集的方式有关,但我可能完全不知道,更熟悉WPF内部结构的人肯定会这么说
但是,解决方法应该很简单:改用
DynamicResource
DynamicSource
的工作方式更像普通绑定,解析引用应该不会有问题。我已经多次单击链接,但都不起作用。每次答案都是我在关键字名称后添加了一个空格,如:x:key=“name”
我经常错过这一点,而且我似乎也从来没有学过。NVM,运行时。通过Activator创建它可能就是问题所在。这是一种在应用程序中使用用户控件的疯狂方式。我猜你没有使用MVVM?通常,您会在DataTemplate中定义UC,并让内容控件根据需要获取它……我有点怀疑,因为另一个资源字典中的PanelBase样式也将画笔作为静态资源引用,这很好。我从文件中读取布局,并从“插件程序集”中动态加载“面板”的实例,DynamicSource是否有效?是的!我勒个去?为什么DynamicResource只在用户控件中工作,而StaticResource在其他地方工作?(包括在用户控件内部??尽管它解除了我的阻止,但我很想知道为什么在这种情况下,DynamicSource对我有效……当你不得不在大部分时间使用DynamicSource而不是StaticResource时,我仍然感到非常困惑(尽管阅读了文档!)
<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>