У меня есть приложение, которое использует несколько настраиваемых тем, которые можно переключать во время выполнения. Темы, приложение и пользовательский интерфейс (UserControls, dialogs и т. Д.) Каждый находятся в отдельной сборке .NET.Резервное копирование отсутствующего стиля в приложении без прикладной темы
Темы не только переопределяют неявные стили стилей по умолчанию (новый шаблон управления), но также предоставляют различные явные стили.
Пример:
<!-- "Themes" assembly -->
<Style TargetType="Button" x:Key="DialogButtonStyle"
BasedOn="{StaticResource BaseButtonStyle}">
<Setter Property="HorizontalAlignment" Value="Left" />
<Setter Property="Height" Value="24" />
<Setter Property="MinWidth" Value="86" />
<Setter Property="Padding" Value="8 0" />
</Style>
<!-- "UI" assembly -->
<Button Style="{DynamicResource DialogButtonStyle}"
Content="OK" />
Темы применяются путем объединения всех их стили, кисти и т.д. в ресурсах приложения, например: (. Или соответствующий код во время выполнения)
<Application x:Class="GUIDemo.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary x:Name="MainDictionary">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary x:Name="ThemeDictionary">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Themes;component/SystemTheme.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
Вопрос:
Можно ли определить стили возврата в моей сборке пользовательского интерфейса (а не в сборке приложений)? Они должны быть автоматически применены, если приложение не включило ни одну из тем, то есть когда ключи типа «DialogButtonStyle» не определены и вызывают сообщения об ошибках на выходе.
Что я хочу достичь, так это то, что моя библиотека пользовательского интерфейса полностью работоспособна, но также может использоваться без необходимости заботиться о настраиваемых тем.
Что я пробовал:
(1) Определение фиктивный app.xaml, который содержит стиль запасной. Это работает во время разработки (предварительный просмотр дизайнера, завершение кода), но не во время выполнения.
(2) Определите стили в «Темы/Generic.xaml». Кажется, что это работает только для неявных стилей, а не для явных стилей.
(3) Объедините Generic.xaml в ресурсы всех файлов XAML, которые используют этот стиль. Это не работает, потому что стиль теперь переопределяет тему.
Нет, это не то, что я имел в виду. Я хочу, чтобы резервные копии были определены в сборке пользовательского интерфейса (а не в приложении).Весь смысл резервных копий состоит в том, чтобы убедиться, что стили определены, даже если приложение правильно применяет тему (или другие файлы ресурсов). –
Нет, тогда. Вам нужно явно указать приложению, что эти ресурсы действительно существуют и где их найти. Я отредактировал свой ответ. – mm8