Как установить основную тему приложения в диалоговом окне, не задавая ее явно в XAML? - PullRequest
1 голос
/ 09 января 2011

Обновление

Мне стыдно сказать, что я допустил ошибку. Ошибка состояла в том, что моя тема не стилизовала элементы, которые я использовал для тестирования, поэтому, конечно, я не видел примененные стили.

Однако ответы, сделанные в ответ на этот вопрос, показывают, как явно установить ресурсы из одного UserControl в другой ..., что интересно.

Когда я устанавливаю ресурсы для приложения так, как я описываю ниже, оно действительно неявно устанавливает все темы управления пользователями в получающемся приложении.


Я использую тему, установленную как ResourceDictionary в моем основном классе Application. Мое главное окно, я думаю, неявно использует эту тему, чтобы стилизовать себя.

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

Следующие комментарии неверны, и все оформлено неявно

Однако, когда я показываю диалог, это не стилизовано.

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

Есть ли какой-то способ сделать это неявно, без явного указания стиля в XAML DialogBox?

Редактировать

Я попытался настроить ресурсы следующим образом. Они не работали.

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

Также попытался установить из основного приложения ... где и определены исходные ресурсы.

dialog.Resources = App.Current.Resources;

Ответы [ 2 ]

3 голосов
/ 09 января 2011

Вы можете реализовать следующим образом:

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 );
1 голос
/ 09 января 2011

Вы можете перенести ресурсы тем или иным способом или просто установить ресурсы диалога в ресурсы главного окна, если вам не нужно указывать также ресурсы, специфичные для диалога:

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

(Так какэто диалог, я также устанавливаю свойство Owner)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...