簡體   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