Wpf 如何将x:key从dll公开到主机应用程序

Wpf 如何将x:key从dll公开到主机应用程序,wpf,dll,key,resourcedictionary,skin,Wpf,Dll,Key,Resourcedictionary,Skin,我创建了一个“主题引擎”,其中包含资源字典和一个自定义组合框,用于更改应用程序的外观。它被包装在一个.dll文件中,目的是能够从任何新的应用程序引用这个.dll,并准备好皮肤逻辑。我已经相对轻松地解决了这个项目的大部分问题,但我还有一个巨大的问题。。。 在调用.dll的应用程序中,可以使用background=“{DynamicResource XKeyOfBrushiWantouse}”设置元素的background之类的属性,但存在一个编译时警告,该警告表示“resource”XKeyOfB

我创建了一个“主题引擎”,其中包含资源字典和一个自定义组合框,用于更改应用程序的外观。它被包装在一个.dll文件中,目的是能够从任何新的应用程序引用这个.dll,并准备好皮肤逻辑。我已经相对轻松地解决了这个项目的大部分问题,但我还有一个巨大的问题。。。 在调用.dll的应用程序中,可以使用background=“{DynamicResource XKeyOfBrushiWantouse}”设置元素的background之类的属性,但存在一个编译时警告,该警告表示“resource”XKeyOfBrushiWantouse“无法解决。这是有意义的,因为.dll尚未加载。一旦我运行了应用程序,它现在就能够找到这个资源并适当地使用它。我想要的是一种知道在编译时/设计时笔刷x:key属性是什么的方法,这样当我将属性设置为值时,我就可以知道哪些选项可用

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

非常感谢您的帮助

提出了一种有趣的方法来解决这个问题,它们基本上为每个特定的元素和样式提供了一组
enum
,以及一个
MarkupExtension
,它从该enum接收一个值并返回相应的字符串键。这样,您可以执行以下操作:

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


谢谢你的回答,我会给你打分,但在我的代表达到10分之前,我不会让你给我打分。我喜欢你的答案,它确实回答了问题,但我希望有一个非第三方解决方案…@MegaMark这不是第三方解决方案,它只是一个想法,你可以用同样的方式自己实现。哦,我的糟糕,我明白你的意思了。但它是如何实现的。。。你能举一个简短的例子吗?自从我最初提出这个问题以来,我一直在努力,并且已经更好地理解了你的答案(也能够投票:),但我仍然不确定后面的枚举代码会是什么样子。我真的很想结束这个项目,现在我已经完成了我的皮肤。非常感谢您在这件事上的帮助。@MegaMark您需要使用
StaticResource
并创建一个新的
MarkupExtension
,您可以使用它从
Enum
返回
ResourceKey
。(或者使用
x:Static
并以相同的方式定义资源)