在网上有很多帖子和博客介绍WPF继承自定义窗体的方法,一般都是把窗体的样式模板写到BaseStyle.xaml中,事件相应和样式加载都写到BaseStyle.cs中。我也模仿着做,但我遇到的问题是,在BaseStyle.cs的构造函数中,通过this.Style = (Style) App.Current.Resources["BaseWindowStyle"];的方式加载样式到当前窗体中的,但系这个返回了null,我已在App中定义了这个BaseWindowStyle资源,是以MergedDictionaries方式定义的。请问大家有遇到过这个问题吗?谢谢大家。我是参考这里做的:
http://www.cnblogs.com/zhouyinhui/archive/2008/03/16/1108561.html

解决方案 »

  1.   

    BaseStyle.cs是一个基类,在App中,定义了资源字典
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="BaseStyle.xaml" />                         
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
    在这里,this.Style = (Style) App.Current.Resources["**"]可以指定BaseStyle.xaml中的某个样式的(所以这应该不存在加载前或加载后的问题)
      

  2.   


    你这么是取不到的,好像应该把样式直接放到app.xaml中才能这么做,merge资源取不到另外这种方式自定义窗体不是很好,有很多东西要自己做,而且比较麻烦,微软已推出Ribbon For WPF,里面包含WPF Shell组件,利用它可以方便的自定义窗体,具体可以参考以下文章:http://blog.csdn.net/duanzilin/article/details/6385151