WPF 提示“在“System.Windows.Markup.StaticResourceHolder”上提供值时引发了异常”解决办法

    写程序时一直报题中所示的错误,提示定义的某个静态资源(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渐变画刷,如果在使用它的资源文件之后定义,也会引发标题所示的异常。

posted @ 2018-03-27 14:31  风口浪猪  阅读(1217)  评论(0编辑  收藏  举报