Загрузка стиля WPF из файла ресурсов - PullRequest
5 голосов
/ 14 октября 2011

Я пытаюсь загрузить стиль WPF из другого файла на самом деле из библиотеки пользовательских элементов управления WPF но я не могу загрузить вот мое решение.

Решение содержит два проекта

  1. WpfTestControls библиотеки пользовательских элементов управления типа WPF

  2. 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>

Файл My 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 ]

5 голосов
/ 14 октября 2011

Пожалуйста, ответьте на несколько вопросов для меня ...

  1. Является ли сборка "Библиотека пользовательских элементов управления WPF" такой же, как и сборка "WpfTestControls"?
  2. Если нет, то делает ли "WPF CustomБиблиотека управления "имеет ссылку на сборку" WpfTestControls "?
  3. Имеет ли ваша WpfTestApp ссылка на сборки" Библиотека пользовательских элементов управления WPF "и" WpfTestControls "?

Если вы добавите эти ссылки, ресурсы должны загрузиться правильно.

Мои шаги ...

  1. Добавьте «Библиотеку пользовательских элементов управления WPF», скажем"ThemesLibray"
  2. В этом добавьте два словаря ресурсов в папке "Темы"

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.

1 голос
/ 21 сентября 2015

Главное: убедитесь, что для параметра «Сборка» вашего словаря ресурсов установлено значение «Ресурс».

...