繁体   English   中英

如何在对话框中设置主应用程序主题,而不在XAML中明确设置?

[英]How do I set my main application theme on a dialog box, without setting it explicitly in the XAML?

更新

我很尴尬地说我犯了一个错误。 错误是我的主题没有设置我用来测试的元素的样式,所以当然我没有看到应用的样式。

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

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


我正在使用一个主题,在我的主Application类上设置为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;

还尝试从主App中设置...这是定义原始资源的位置。

dialog.Resources = App.Current.Resources;

你可以实现如下:

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

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

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

dialog.Resources.MergedDictionaries.Add( dict );

您可以以这种或那种方式传输资源,或者如果您不需要指定对话框特定资源,则只需将对话框的资源设置为主窗口的资源:

    public Dialogue(Window owner)
    {
        this.InitializeComponent();
        Owner = owner;
        Resources = Owner.Resources;
    }

(因为它是对话我也设置了Owner属性)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM