Загрузка стиля WPF из файла ресурсов
Я пытаюсь загрузить стиль WPF из другого файла на самом деле из библиотеки пользовательских элементов управления WPF, но мне не удается загрузить вот мое решение.
Решение содержит два проекта
WpfTestControls библиотеки пользовательских элементов управления типа WPF
WpfTestApp типа библиотеки приложений WPF, которая имеет ссылку на WpfTestControls
MainWindow.xaml из библиотеки приложений WPF
<Window.Resources>
<Style x:Key="TempStyle" TargetType="{x:Type TextBox}">
<Setter Property="BorderBrush" Value="Green"/>
</Style>
</Window.Resources>
<Grid>
<TextBox Height="50px" Width="100px" Style="{DynamicResource TempStyle}"/>
</Grid>
Generic.xaml из библиотеки пользовательских элементов управления WPF
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/WpfTestControls;component/TextBoxStyle.xaml"/>
</ResourceDictionary.MergedDictionaries>
TextBoxStyle.xaml из библиотеки пользовательских элементов управления WPF
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="TempStyle" TargetType="{x:Type TextBox}">
<Setter Property="BorderBrush" Value="Green"/>
</Style>
Мой файл AssemblyInfo.cs содержит следующее
[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
//(used if a resource is not found in the page,
// or application resource dictionaries)
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page,
// app, or any theme specific resource dictionaries))]
Но я все еще не могу загрузить Стиль. Если я использую не Generic.xaml все работает нормально, например, следующий код работает как ожидалось
<Window x:Class="WpfTestApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Style x:Key="TempStyle" TargetType="{x:Type TextBox}">
<Setter Property="BorderBrush" Value="Green"/>
</Style>
</Window.Resources>
<Grid>
<TextBox Height="50px" Width="100px" Style="{StaticResource TempStyle}"/>
</Grid>
Что я делаю неправильно? заранее спасибо
2 ответа
Пожалуйста, ответьте несколько вещей для меня...
- Является ли сборка "Библиотека пользовательских элементов управления WPF" такой же, как сборка "WpfTestControls"?
- Если нет, то имеет ли "Библиотека пользовательских элементов управления WPF" ссылку на сборку "WpfTestControls"?
- Ваш
WpfTestApp
есть ссылка на сборки "Библиотека пользовательских элементов управления WPF" и "WpfTestControls"?
Если вы добавите эти ссылки, ресурсы должны загружаться правильно.
Мои шаги...
- Добавьте "Библиотека пользовательских элементов управления WPF", скажем "ThemesLibray"
- В этом добавить два словаря ресурсов в папке "Темы"
TextBoxStyle.xaml
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="GreenTextBoxStyle" TargetType="{x:Type TextBox}">
<Setter Property="Background" Value="Green"/>
</Style>
</ResourceDictionary>
Generic.xaml
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="TextBoxStyle.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
У меня есть главный стартовый проект "MyWPFTestApp", который имеет ссылку на сборку
ThemesLibray
, В этом окне естьThemesLibrary
ресурсы слились таким образом....<Window x:Class="MyWPFTestApp.Window7" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window7" Height="300" Width="300"> <Window.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="/ThemseLibrary;component/Themes/Generic.xaml"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Window.Resources> <Grid> <TextBox Style="{StaticResource GreenTextBoxStyle}"/> </Grid> </Window>
Когда я запускаю MyWPFTestApp, я вижу окно с зеленым TextBox.
Главное: удостоверьтесь, что у вас есть Build Action вашего Resource Dictionary для Resource.