c# - 如何在对话框中设置我的主要应用程序主题,而不是在 XAML 中显式设置它?

标签 c# wpf xaml dialog

更新

不好意思说我错了。错误是我的主题没有为我用来测试的元素设置样式,所以我当然没有看到应用的样式。

但是,针对此问题做出的回答确实显示了如何将资源从一个 UserControl 显式设置到另一个...这很有趣。

当我按照下面描述的方式在应用程序上设置资源时,它确实会在生成的应用程序中隐式设置所有用户控件主题。


我正在使用一个主题,在我的主应用程序类中设置为 ResourceDictionary。我猜我的主窗口隐含地使用这个主题来设计自己。

<Application>
    <Application.Resources>
        <ResourceDictionary Source="Themes/ExpressionDark.xaml" />

下面的注释是错误的,所有的样式都是隐式的

然而,当我显示一个对话框时,它没有样式。

DialogBox dialog = new DialogBox();
dialog.ShowDialog();

有没有办法在不在 DialogBox 的 XAML 中显式指定样式的情况下隐式执行此操作?

编辑

我尝试通过以下方式设置资源。他们没有工作。

Window main = App.Current.Windows[0];
dialog.Resources = main.Resources;
dialog.Owner = main;

还尝试从主应用程序设置...这是定义原始资源的地方。

dialog.Resources = App.Current.Resources;

最佳答案

你可以像下面这样实现:

dialog.Resources.MergedDictionaries.Add( this.Resources.MergedDictionaries[0] );

另一种可能性是从应用程序加载它们(但我不喜欢):

ResourceDictionary dict = Application.LoadComponent( new Uri( "<library>;component/Themes/<theme>.xaml", UriKind.Relative ) ) as ResourceDictionary;

dialog.Resources.MergedDictionaries.Add( dict );

关于c# - 如何在对话框中设置我的主要应用程序主题,而不是在 XAML 中显式设置它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4640629/

相关文章:

c# - 测试 URL 和查询字符串是否有效

C#如何表示和遍历一棵N叉树

wpf - 从数据模板内部绑定(bind)到 View 模型

c# - UWP 删除 Gridview 中的焦点边框

c# - 是否可以将 2 个属性绑定(bind)到单个 DataGrid 字段中?

c# - 等待时发生 StaleElementReferenceException

c# - 有谁知道哪里有可以生成示例信用卡号的 c# 代码或 dll

wpf - 为什么 1920 与设备无关的单元不是具有 96 DPI 的 1920 像素?

c# - 不支持将多个修饰键分配给一个按键手势 SHIFT + F

.net - WPF 进度条无法正确左对齐