WPF 提示“在“System.Windows.Markup.StaticResourceHolder”上提供值时引发了异常”解决办法
程序员文章站
2022-06-09 19:21:58
写程序时一直报题中所示的错误,提示定义的某个静态资源(staticResource)无法找到。百思不得其解,百度了一下才意识到时资源定义顺序的问题。 App.xaml定义如下: 如上所示,定义了两个资源字典:Templete.xaml和Style.xaml。发生错误的原因是Templete.xaml ......
写程序时一直报题中所示的错误,提示定义的某个静态资源(staticResource)无法找到。百思不得其解,百度了一下才意识到时资源定义顺序的问题。
App.xaml定义如下:
<Application x:Class="WpfApp2.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:WpfApp2" StartupUri="FrmMain.xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" d1p1:Ignorable="d" xmlns:d1p1="http://schemas.openxmlformats.org/markup-compatibility/2006"> <Application.Resources> <ResourceDictionary> <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" xmlns:vm="clr-namespace:WpfApp2.ViewModel" /> <LinearGradientBrush x:Key="MainBrush" EndPoint="1,1" StartPoint="0,0"> <GradientStop Color="#242424" Offset="0"/> <GradientStop Color="#101010" Offset="1"/> </LinearGradientBrush> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="/WpfApp2;component/Dictionary/Templete.xaml"/> <ResourceDictionary Source="/WpfApp2;component/Dictionary/Style.xaml"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> </Application>
如上所示,定义了两个资源字典:Templete.xaml和Style.xaml。发生错误的原因是Templete.xaml 用到了Style.xaml中定义的样式,但是Style.xaml又是放在Templete后定义的,所以引发了异常。解决方法就是把两个
资源字典文件定义的顺序换一下。
总结:1.先定义的资源使用后定义的资源会引发异常。
2.一般画刷、颜色、定义的本地类等最好放在资源文件的最前面,如本例定义的MainBrush渐变画刷,如果在使用它的资源文件之后定义,也会引发标题所示的异常。