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

本文关键字:资源 Generic xaml 项目 字典 另一个 解决方案 覆盖 | 更新日期: 2023-09-27 18:25:01

我有一个解决方案,其中有一个Windows Phone应用程序项目和一个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中使用此资源的每个元素?

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

您基本上只需要在加载泛型值后用另一个值覆盖x:Key。您可以通过动态加载包含要覆盖的密钥的资源文件来实现这一点。

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

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

我设法找到了一种方法。由于我有一个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中设置属性,但我无法设置。因此,在接下来的几天里,如果有人能告诉我如何设置,我会将他们的回复标记为答案。