Темы WPF могут использоваться для включения нескольких шкур для приложения, которое может быть изменено во времени выполнения?

Вы можете добавить все эти шаги в ловушку жизненного цикла, например before_install .

before_install
  - cd ./subfolder1
  - npm install
  - npm test 
  - npm run build
  - cd ./subfolder2
  - npm install
  - npm test 
  - npm run build

Вы также можете выполнить тестирование и сборку обоих этих проектов в разделе script, но идея заключается в том, что вам нужно самостоятельно управлять последовательностью выполняемых действий. Это сделает install stage просто заполнителем.

10
задан Laurel 25 June 2016 в 01:34
поделиться

2 ответа

Вот фрагмент кода, который я использовал в своем приложении, поддерживающем тематику. В этом примере у меня две темы (Default и Classic XP). Ресурсы темы хранятся в файлах DefaultTheme.xaml и ClassicTheme.xaml соответственно.

Это код по умолчанию в моем App.xaml

<Application ...>
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="ArtworkResources.xaml" />
                <ResourceDictionary Source="DefaultTheme.xaml" />
            </ResourceDictionary.MergedDictionaries>

            <Style x:Key="SwooshButton" TargetType="ButtonBase">
                <!-- style setters -->
            </Style>

            <!-- more global styles -->
        </ResourceDictionary>
    </Application.Resources>
</Application>

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

    private Themes _currentTheme = Themes.Default;
    public Themes CurrentTheme
    {
        get { return _currentTheme; }
        set { _currentTheme = value; }
    }

    public void ChangeTheme(Themes theme)
    {
        if (theme != _currentTheme)
        {
            _currentTheme = theme;
            switch (theme)
            {
                default:
                case Themes.Default:
                    this.Resources.MergedDictionaries.Clear();
                    AddResourceDictionary("ArtworkResources.xaml");
                    AddResourceDictionary("DefaultTheme.xaml");
                    break;
                case Themes.Classic:
                    this.Resources.MergedDictionaries.Clear();
                    AddResourceDictionary("ArtworkResources.xaml");
                    AddResourceDictionary("ClassicTheme.xaml");
                    break;
            }
        }
    }

    void AddResourceDictionary(string source)
    {
        ResourceDictionary resourceDictionary = Application.LoadComponent(new Uri(source, UriKind.Relative)) as ResourceDictionary;
        this.Resources.MergedDictionaries.Add(resourceDictionary);
    }

При таком подходе вам также необходимо иметь в виду, что любые стили, использующие тему, должны иметь динамический ресурс. Например:

<Window Background="{DynamicResource AppBackgroundColor}" />
12
ответ дан 3 December 2019 в 22:38
поделиться

Я не знаю, как сделать это в рамках, но вы можете сделать это, если стилизуете каждый элемент управления, который может изменяться самостоятельно.

Теория состоит в том, чтобы создать стиль a DynamicResource , а затем загрузить ResourcesDictionary на основе пользовательской конфигурации для другого стиля.

Здесь - статья с примером.

3
ответ дан 3 December 2019 в 22:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: