如何将x:key从dll暴露给宿主应用程序

时间:2013-03-21 21:33:30

标签: wpf dll key resourcedictionary skin

我创建了一个'主题引擎',它包含资源字典和自定义组合框,用于更改应用程序的外观。它包含在.dll文件中,目的是能够从任何新应用程序引用此.dll并准备好皮肤逻辑。我已经相对轻松地解决了这个项目的大部分问题,但我留下了一个大问题...... 在调用.dll的应用程序中,可以使用Background =“{DynamicResource XKeyOfBrushIWantToUse}”设置元素的背景等属性,但是有一个编译时警告,指出“资源”XKeyOfBrushIWantToUse“无法解析”这是有道理的,因为.dll还没有被加载。一旦我运行应用程序,它现在能够找到这个资源并适当地使用它。我想要的是一种方法来了解什么是刷x:键属性是在编译时/设计时,所以当我将属性设置为值时,我可以知道可用的选项。

例如在我的.dll中有一个刷子谁是x:key =“MainWindowBackgroundBrush”。此画笔的颜色属性根据加载的包含颜色的resourcedictionary而更改。 (即BlueColors.xaml的颜色是谁的键是BackgroundColor,RedColors.xaml也是如此。在运行时我可以交换颜色文件,画笔仍然会指向“BackgroundColor”,尽管颜色的十六进制值现在不同了)现在当我转到一个新的应用程序并引用.dll并设置一个按钮的背景颜色,我必须知道画笔的键是什么,因为我还没有找到一种方法来显示.dll中的可用键。

非常感谢帮助!!!!

1 个答案:

答案 0 :(得分:2)

DevExpress提出了一种解决此问题的有趣方法,它们基本上为每个特定元素和样式设置了一组Enums,并且从MarkupExtension获取了一个值枚举并返回适当的字符串键。这样你就可以做到:

<Style BasedOn="{StaticResource {dxgt:GridRowThemeKey ResourceKey=CellStyle}}"> 
  <!-- and so on... -->