0

我有一个解决方案,其中我有一个 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 应用程序中更改 this 的值SolidColorBrush,使其影响 ClassLibrary 中使用此资源的每个元素?

4

2 回答 2

1

您基本上只需要在已经加载通用值之后用另一个值覆盖 x:Key 即可。您可以通过动态加载包含要覆盖的键的资源文件来做到这一点。

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

Resources.MergedDictionaries.Add(new ResourceDictionary { Source = new Uri("pack://application:,,,/WPF.Common.UI;component/Resources/Dictionaries/ApplicationResourceDictionary.xaml") });
于 2014-09-30T13:36:15.607 回答
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";

理想情况下,我希望能够ResourceDictionary在 XAML 中设置属性,但是我无法做到。所以在接下来的几天里,如果有人能告诉我怎么做,我会把他们的回复标记为答案。

于 2014-09-30T16:01:50.403 回答