我有一个包含主题“引擎”的 .dll。我几乎用一个内置的组合框完成了这个引擎,该组合框处理通过 .dll 切换主题。简而言之,我想要完成的是一个独立的 .dll,我可以从任何项目中引用它并且(无需向托管应用程序添加任何代码)拥有我的主题、样式等......
到目前为止,这是可行的,但我遇到了一点困境。由于 .dll 在运行时使用 URI 语法加载必要的 xaml 文件,因此托管应用程序控件本身在加载应用程序之前不知道资源。现在这会生成一个编译时警告,但在运行应用程序时没有问题。
我的问题与这个编译时问题有关。如果在运行时之前无法查看 .dll 中可用的画笔,如何设置主窗口的背景颜色?
<Window x:Class="Check.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mycon="clr-namespace:ThemeLibrary.MyControls;assembly=ThemeLibrary"
Title="MainWindow" Height="350" Width="525" WindowStyle="None" AllowsTransparency="True"
Background="{***DynamicResource ResourceKey=TransparentColorBrush***}">
同样,尽管存在错误,但程序编译并运行良好,因为如果无法解析动态资源,则窗口只是默认设置,但是一旦 .dll 加载包含其键为 TransparentColorBrush 的画笔的资源字典,则窗口背景适当改变。但是,如果我将我的 .dll 交给公众玩,他们将不知道不同的刷子键是什么,因此将无法进行此 hack。
那么,如何在 .dll 中设置 Application.Current.MainWindow.Background =(来自 URI 加载的资源字典或字典本身的画笔),或者将画笔的键公开为公共属性?