- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 WinForms 容器中托管 WPF UserControl。现在,我希望能够为 UserControl 设置主题/外观。为此,我有几个定义“皮肤”的资源词典。当我的应用程序启动时,我创建了一个“new System.Windows.Application()”,以便 Application.Current 存在。要更改主题,旧皮肤被删除,新皮肤在运行时合并到应用程序级资源字典中。但是,这不会更改 UserControl 中任何动态引用的资源。我在一个直接的 WPF 应用程序中尝试了这个,它工作得很好。我是否遗漏了什么,或者根本不可能做到这一点?顺便说一下,如果我在 UserControl 初始化之前将皮肤添加到应用程序资源中,它将起作用,但之后我无法更改皮肤。
以最基本的方式 repo :
创建一个新的 WinForms 应用程序。将 WPF UserControl 添加到应用程序。这很简单:
<UserControl ...>
<Grid>
<Button
Background="{DynamicResource ButtonBG}"/>
</Grid>
</UserControl>
private void White_Click(object sender, EventArgs e)
{
Application.Current.Resources.MergedDictionaries[0] =
(ResourceDictionary)Application.LoadComponent(
new Uri(@"\WpfThemes;component\White.xaml", UriKind.Relative)));
}
private void Black_Click(object sender, EventArgs e)
{
Application.Current.Resources.MergedDictionaries[0] =
(ResourceDictionary)Application.LoadComponent(
new Uri(@"\WpfThemes;component\Black.xaml", UriKind.Relative)));
}
[STAThread]
static void Main()
{
new System.Windows.Application();
Application.Current.Resources.MergedDictionaries[0] =
(ResourceDictionary)Application.LoadComponent(
new Uri(@"\WpfThemes;component\White.xaml", UriKind.Relative)));
...
}
最佳答案
我认为这可能是 WPF 框架中被忽视的问题。
从我通过 Reflector 了解到的情况看来,当 Application
资源字典发生了灾难性的变化(这种变化可能会产生广泛的影响,例如添加、删除或更换皮肤),有代码循环遍历所有 Windows
并迫使他们重新评估他们的 DynamicResources
.但是,我认为 WPF 中顶级的其他元素,例如 ElementHost
s 没有得到同样的待遇。这导致了我正在经历的行为。
我解决这个问题的方法是手动检查我所有的 ElementHost
单独添加、删除或更换皮肤 ResourceDictionary
文件。它并不完美,但它完成了工作。
关于wpf - 动态应用程序级资源在 ElementHost 中托管时不是动态的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/727141/
我是一名优秀的程序员,十分优秀!