在同一解决方案中覆盖另一个项目的Generic.xaml资源字典资源

时间:2014-09-30 13:27:20

标签: c# wpf xaml resourcedictionary generic.xaml

我有一个解决方案,其中我有一个Windows Phone App项目和一个ClassLibrary,它本身有TemplatedControl.cs,其默认样式在 ClassLibrary / Themes / Generic.xaml 资源字典中引用点。

- MySolution
    - WPApp_Project
        - MainPage.xaml/MainPage.xaml.cs
        - App.xaml/App.xaml.cs

    - ClassLibrary_Project
        - Themes
            - Generic.xaml
        - View
            - TemplatedControl.cs
        - ViewModel
            - TemplatedViewModel.cs
            - ViewModelLocator.cs

例如,我在Generic.xaml文件中定义了这个:

<SolidColorBrush x:Key="MyBrush" Color="Gold"/>

如何从我的WP应用程序中将此SolidColorBrush的值更改为影响使用此资源的ClassLibrary中的每个元素的范围?

2 个答案:

答案 0 :(得分:1)

在基本值已加载之后,你基本上只需要用另一个值覆盖x:Key。您可以通过动态加载包含要覆盖的键的资源文件来执行此操作。

要动态加载XAML资源字典,您可以执行以下操作:

Resources.MergedDictionaries.Add(new ResourceDictionary { Source = new Uri("pack://application:,,,/WPF.Common.UI;component/Resources/Dictionaries/ApplicationResourceDictionary.xaml") });

答案 1 :(得分:0)

我设法找到了这样做的方法。由于我在TemplatedViewModel.cs中附加了Generic.xaml属性,我基本上为我想要更改的内容创建了额外的属性,即,如果我想更改TextBlock的颜色,我添加了关注我的Generic.xaml

<TextBlock Content="I am a TextBlock" Foreground="{Binding Path=HappyColor}" />

在我的WPApp中,我得到了TemplatedViewModel.cs的一个实例并将其设置为新颜色:

TemplatedViewModel viewModel = ViewModelLocator.TemplatedStatic;
viewModel.HappyColor = "#00FF00";

理想情况下,我希望能够在XAML的ResourceDictionary中设置属性,但我无法做到。因此,如果有人能告诉我如何做到这几天,我会将他们的答复标记为答案。