У меня есть сборка библиотеки классов С# (2008/.NET 3.5), которая поддерживает WPF (на основе в этой статье).
Я создал несколько окон, и теперь я пытаюсь создать для них общий набор стилей. Однако, поскольку это библиотека классов (вместо приложения WPF), у меня нет app.xaml(и содержащегося в нем приложения и соответствующих Application.Resources), в котором хранятся эти стили для глобального доступа.
Итак: Как создать набор определений стиля верхнего уровня, который будет отображаться всеми файлами xaml в сборке, учитывая, что у меня нет app.xaml(см. выше)? И/или можно добавить рабочее приложение app.xaml в библиотеку классов?
FYI, я попытался создать ResourceDictionary в файле ResourceDictionary.xaml и включить его в каждое окно в блоке Window.Resources. Это оказалось для решения стиля кнопок и т.д., Но не для закрывающего окна. Я могу положить Style="{StaticResource MyWindowStyle}"
в блок открытия окна, и он компилируется и отображается в окне VS Design отлично, но во время фактического выполнения я получаю исключение синтаксического анализа (MyWindowStyle не может быть найден, я предполагаю, что Visual Studio видит словарь включенный после строки, о которой идет речь, но CRL делает вещи более последовательно и, следовательно, еще не загрузил ResourceDictionary).
Спасибо за идеи, но до сих пор нет... очевидно, что библиотека классов НЕ поддерживает использование generic.xaml неявно. Я добавил generic.xaml в мой проект библиотеки классов и установил его действие сборки в "Ресурс". Он содержит:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="{x:Type Window}" x:Key="MyWindow">
<Setter Property="Background" Value="Black"/>
</Style>
</ResourceDictionary>
Окно xaml, которое я хочу использовать, выглядит следующим образом:
<Window x:Class="MyAssembly.ConfigureGenericButtons"
x:ClassModifier="internal"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Style="{StaticResource MyWindow}"
Title="ConfigureGenericButtons">
...Buttons, etc...
</Window>
Хотя окно VS Design не отображает окно, используя стиль MyWindow (т.е. черный фон), он компилируется и запускается. Однако, когда приложение, содержащее эту библиотеку классов, вызывает вызов, вызывающий отображение этого окна, я получаю исключение XamlParseException:
Невозможно найти ресурс с именем '{MyWindow}'.
Я также попытался оставить параметр Style, чтобы увидеть, будет ли окно использовать стиль по умолчанию (и я пробовал это как с x: Key в generic.xaml, включенным, так и без него). Нет ошибок, но ничего, что определено в generic.xaml, также не отображалось.
Я делаю что-то неправильно здесь или какие-либо другие идеи о том, как можно использовать обычные пользовательские стили в окне (т.е. не нужно определять стили в каждом окне xaml) - с оговоркой, что это НЕ является ли приложение?