覆盖同一解决方案中另一个项目的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中使用此资源的每个元素?
您基本上只需要在加载泛型值后用另一个值覆盖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
中设置属性,但我无法设置。因此,在接下来的几天里,如果有人能告诉我如何设置,我会将他们的回复标记为答案。