欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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渐变画刷,如果在使用它的资源文件之后定义,也会引发标题所示的异常。