【发布时间】:2017-09-01 04:58:11
【问题描述】:
我有一个基于 c# wpf 的类库,其中包含模型、视图模型和视图,我在具有支持托管可停靠 WPF 用户控件的 API 的 dektop 应用程序的多个加载项中使用它。从这里我可以使用不同的控件和启动对话框来与第 3 方应用程序中的各种数据结构进行交互。我的类库没有 App.xaml 文件。
我创建了一个 ResourceDictionary xaml 文件,在我的视图中用作主样式表。在我的用户控件和窗口中,我引用了它:
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="../Resources/styleMain.xaml"/>
</ResourceDictionary.MergedDictionaries
在此样式表中,我管理各种控件以简化和统一我的视图。在最低级别,我有字体大小、字体系列和颜色等设置。例如,我有几个在我的控件中使用的画笔。一个看起来像这样:
<Color x:Key="ColorBase_Primary" R="255" G="0" B="115" A="255"/>
<SolidColorBrush x:Key="Color_Primary" Color="{StaticResource ColorBase_Primary}"/>
这一切都非常适合设计和测试。但是,我在多个其他项目中引用了这个类库。在这些其他项目中,我从我的类库中托管主用户控件:
<UserControl x:Class="MyAppHost.ucDockingHost"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:MyAppHost"
xmlns:viewModels="clr-namespace:MyClassLibrary.ViewModels;assembly=MyClassLibrary"
xmlns:views="clr-namespace:MyClassLibrary.Views;assembly=MyClassLibrary"
mc:Ignorable="d">
<UserControl.DataContext>
<viewModels:vmMain/>
</UserControl.DataContext>
<Grid>
<views:ucMainGrid ViewModelMain="{Binding}" Property1="SomeValue" Property2="SomeOtherValue"/>
</Grid>
</UserControl>
在这里,我正在从引用我的类库的加载项应用程序中设置 DependencyProperties,没有任何问题,并且我的所有绑定和控制行为都运行良好。
我现在希望做的是能够从我的加载项(而不是主类库)中指定在整个样式表中使用的基本资源值,尤其是颜色(因为能够更改与x:Key="ColorBase_Primary" 关联的值)。通过这种方式,我可以根据不同客户的品牌等调整不同的实现。我一直在寻找任何示例或见解,并且不断提出不足。
使用每个应用程序独立部署整个类库并直接调整样式表很容易,但这似乎根本不对。我有什么方法可以在我的加载项应用程序中创建一个 ResourceDictionary,它可以提供、修改或/覆盖我的类库中指定的资源值?或者我应该通过我的视图模型中的 DependencyProperty 来做到这一点?这似乎也不对。
【问题讨论】:
-
我不认为我理解你的问题。您是否要覆盖在特定应用程序中引用的类库中定义的某些资源,或者您的问题是什么?
-
你确实明白我的问题。我想引用我的类库其他应用程序,并且在这些应用程序中能够覆盖一些资源。
标签: c# wpf resourcedictionary