У меня есть сборка библиотеки классов C # (2008 / .NET 3.5), которая поддерживает WPF (на основе этой статьи ).
Я создал несколько окон и сейчас пытаюсь создать общий стиль для них. Однако, поскольку это библиотека классов (а не приложение WPF), у меня нет app.xaml (и содержащегося в нем Application & соответствующим Application.Resources), в котором можно хранить эти стили для глобального доступа.
Итак: Как создать набор определений стилей верхнего уровня, который будет виден всем файлам xaml в сборке, , учитывая, что у меня нет app.xaml (см. выше) ? И / или возможно ли добавить рабочий app.xaml в библиотеку классов?
К вашему сведению, я попытался создать ResourceDictionary в файле ResourceDictionary.xaml и включить его в каждое окно в блоке "Window.Resources". Это оказалось для решения стиля кнопок и т. Д., Но не для окружающего окна. Я могу поместить Style="{StaticResource MyWindowStyle}"
в блок открытия окна, и он прекрасно компилируется и отображается в окне VS Design, но во время реального времени выполнения я получаю исключение синтаксического анализа (MyWindowStyle не может быть найден; я предполагаю, что Visual Studio видит словарь включается после рассматриваемой строки, но CRL делает вещи более последовательно и, следовательно, еще не загрузил ResourceDictionary).
Спасибо за идеи, но все равно не пойдет ... по-видимому, библиотека классов НЕ поддерживает неявно generic.xaml. Я добавил generic.xaml в свой проект библиотеки классов и установил для его действия «Resource». Содержит:
<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 каждого окна) - с оговоркой, что это НЕ является приложением?