Установить ресурс или стиль для окна из другой библиотеки классов - PullRequest
2 голосов
/ 28 марта 2011

Я следую призме, чтобы построить приложение wpf. В моем приложении есть вспомогательная библиотека классов, в которой я определил ресурсы и стили, которые будут использоваться несколькими библиотеками классов в решении.

Но я получаю сообщение об ошибке, когда пытаюсь установить ресурс для атрибута стиля окна. Окно находится в другой библиотеке классов как ресурс.

Я получаю ошибку: Не удается найти ресурс с именем '{resourceName}'. Имена ресурсов чувствительны к регистру. Ошибка в объекте «MyWindow» в файле разметки

Я использовал следующий код, но он не работает

<Window x:Class="Class1" Style="{StaticResource resourceName}">

<Window.Resources>    
        <ResourceDictionary>     
        <ResourceDictionary.MergedDictionaries>

       <ResourceDictionary Source="pack://application:,,,/classlibrary;component/Dictionary/resource1.xaml" />              </ResourceDictionary.MergedDictionaries>

    < /ResourceDictionary>

< /Window.Resources>
</Window>

Ответы [ 2 ]

3 голосов
/ 29 марта 2011

Вам необходимо использовать расширение разметки DynamicResource . Причина этого в том, что внешний ResourceDictionary, который вы импортируете, объявляется в вашем xaml после того, как стиль установлен для вашего Window. Рабочий пример установки стиля окна со стилем, определенным в библиотеке классов, на которую ссылаются, приведен ниже:

"MainWindow" xaml:

<Window x:Class="WpfApplication3.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"
    Style="{DynamicResource TestStyle}">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary 
Source="pack://application:,,,/ClassLibrary1;component/Styles.xaml">
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid>
</Grid>
</Window>

ResourceDictionary (определенный в файле с именем Styles.xaml) в библиотеке классов:

<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<Style x:Key="TestStyle" TargetType="Window">
    <Setter Property="Background">
        <Setter.Value>
            <SolidColorBrush Color="Green"></SolidColorBrush>
        </Setter.Value>
    </Setter>
</Style>

</ResourceDictionary>
1 голос
/ 01 апреля 2011

Вы можете использовать пакетный URL для получения словаря ресурсов из другой сборки.Проверьте этот поток .

Вот пример словаря ресурсов, прочитанного из Common сборки:

<Application.Resources> 
    <ResourceDictionary> 
        <ResourceDictionary.MergedDictionaries> 
            <ResourceDictionary Source="pack://application:,,,/Common;component/styles.xaml"/> 
        </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...