Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка - Свойство "Resources" уже задано для "Main 
:(
    Опции темы
1datr
Дата 24.9.2014, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 10.2.2009

Репутация: нет
Всего: -1



В MainWindow.xaml
Код


<Window.Resources>
        <ResourceDictionary Source="/PresentationFramework.Aero, Version=3.0.0.0, Culture=neutral, 
    PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=MSIL;component/themes/aero.normalcolor.xaml" />
        <CollectionViewSource x:Key="VCellContentCount"  />
        <Style x:Key="btnOccupied">
            <Setter Property="Control.FontWeight" Value="Bold"></Setter>         
        </Style>
    </Window.Resources>


В компоненте, используемом в MainWindow
Код

<UserControl.Resources>        
        <ResourceDictionary x:Name="PowerBtnCaptions">
            <base:String x:Key="true">ON</base:String>
            <base:String x:Key="false">OFF</base:String>           
        </ResourceDictionary>
    
        <ResourceDictionary x:Name="PowerBtnBrushes">
            <SolidColorBrush x:Key="true">Yellow</SolidColorBrush>
            <SolidColorBrush x:Key="false">Gray</SolidColorBrush>
        </ResourceDictionary>
    
        <ResourceDictionary x:Name="StackerErrors">
            <base:String x:Key="1">Ошибка привода</base:String>
            <base:String x:Key="2">Превышение момента ось Х</base:String>
            <base:String x:Key="3">Превышение момента ось Y</base:String>
            <base:String x:Key="4">Превышение момента ось Z</base:String>
            <base:String x:Key="5">Ошибка при референцировании</base:String>
        </ResourceDictionary>
    </UserControl.Resources>


При запуске происходит ошибка: 
Просмотр информации об ошибке
Цитата
System.Windows.Markup.XamlParseException произошло
  Message="Свойство "Resources" уже задано для "MainWindow".": номер строки "5" и позиция в строке "6".
  Source=PresentationFramework
  LineNumber=5
  LinePosition=6
  StackTrace:
       в System.Windows.Markup.XamlReader.RewrapException(Exception e, IXamlLineInfo lineInfo, Uri baseUri)
       в System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
       в System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri)
       в System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
       в System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
       в WpfStacker.MainWindow.InitializeComponent() в d:\программы\beeVNCKirishi\WpfStacker\MainWindow.xaml:строка 1
       в WpfStacker.MainWindow..ctor() в D:\программы\beeVNCKirishi\WpfStacker\MainWindow.xaml.cs:строка 26
  InnerException: System.Xaml.XamlDuplicateMemberException
       Message="Свойство "Resources" уже задано для "MainWindow".": номер строки "5" и позиция в строке "6".
       Source=System.Xaml
       LineNumber=5
       LinePosition=6
       StackTrace:
            в System.Xaml.XamlObjectWriter.WriteEndObject()
            в System.Xaml.XamlWriter.WriteNode(XamlReader reader)
            в System.Windows.Markup.WpfXamlLoader.TransformNodes(XamlReader xamlReader, XamlObjectWriter xamlWriter, Boolean onlyLoadOneNode, Boolean skipJournaledProperties, Boolean shouldPassLineNumberInfo, IXamlLineInfo xamlLineInfo, IXamlLineInfoConsumer xamlLineInfoConsumer, XamlContextStack`1 stack, IStyleConnector styleConnector)
            в System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
       InnerException: 

PM MAIL   Вверх
Ilya81
Дата 24.9.2014, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 18.4.2014
Где: ЛО, Всеволожский р-н

Репутация: 1
Всего: 4



Дело в том, что свойство Resources у FrameworkElement и всего, что от него наследуется, имеет тип ResourceDictionary. За счёт интерфейса ICollection его можно напрямую не объявлять в XAML'е, а просто перечислять ресурсы, но никак не словари ресурсов. Так что либо один словарь ресурсов, либо коллекция ресурсов, но не несколько значений одновременно.

Если нужно дополнить несколько ресурсов словарями, пишите так:
Код

    <Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/PresentationFramework.Aero, Version=3.0.0.0, Culture=neutral, 
    PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=MSIL;component/themes/aero.normalcolor.xaml" />
            </ResourceDictionary.MergedDictionaries>
            <CollectionViewSource x:Key="VCellContentCount"  />
            <Style x:Key="btnOccupied">
                <Setter Property="Control.FontWeight" Value="Bold"></Setter>         
            </Style>
        </ResourceDictionary>
    </Window.Resources>

PM MAIL ICQ Skype   Вверх
1datr
Дата 24.9.2014, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 10.2.2009

Репутация: нет
Всего: -1



Не понял, честно говоря. Привидите, пожалуйста, пример с двумя наборами ресурсов. Как сделать в ресурсах несколько наборов надписей с ключами чтобы потом к ним обращаться?

Добавлено через 10 минут и 12 секунд
Цитата(Ilya81 @ 24.9.2014,  16:45)
Дело в том, что свойство Resources у FrameworkElement и всего, что от него наследуется, имеет тип ResourceDictionary. За счёт интерфейса ICollection его можно напрямую не объявлять в XAML'е, а просто перечислять ресурсы, но никак не словари ресурсов. Так что либо один словарь ресурсов, либо коллекция ресурсов, но не несколько значений одновременно.

Если нужно дополнить несколько ресурсов словарями, пишите так:
Код

    <Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/PresentationFramework.Aero, Version=3.0.0.0, Culture=neutral, 
    PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=MSIL;component/themes/aero.normalcolor.xaml" />
            </ResourceDictionary.MergedDictionaries>
            <CollectionViewSource x:Key="VCellContentCount"  />
            <Style x:Key="btnOccupied">
                <Setter Property="Control.FontWeight" Value="Bold"></Setter>         
            </Style>
        </ResourceDictionary>
    </Window.Resources>

Написал так. Не помогает.
PM MAIL   Вверх
1datr
Дата 24.9.2014, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 10.2.2009

Репутация: нет
Всего: -1



Временно решил проблемму распределением ресурсов между разными элементов (вложенные ресурсы)
PM MAIL   Вверх
Ilya81
Дата 25.9.2014, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 18.4.2014
Где: ЛО, Всеволожский р-н

Репутация: 1
Всего: 4



Цитата(1datr @  24.9.2014,  17:07 Найти цитируемый пост)
Привидите, пожалуйста, пример с двумя наборами ресурсов. Как сделать в ресурсах несколько наборов надписей с ключами чтобы потом к ним обращаться?

Что подразумевается под наборами ресурсов? ResourceDictionary - это словарь, т. е. одномерный список с ключами и значениями, каждый из них типа object, т. е. значением может быть любой тип данных. Но иерархию в самом ResourceDictionary не создать никак. MergedDictionaries всего лишь объединяет словари, но список остаётся одномерным.

Если хотите использовать ResourceDictionary как значение, то попробуйте так:
Код

    <UserControl.Resources>       
      <ResourceDictionary>        
        <ResourceDictionary x:Name="PowerBtnCaptions">
            <base:String x:Key="true">ON</base:String>
            <base:String x:Key="false">OFF</base:String>           
        </ResourceDictionary>
    
        <ResourceDictionary x:Name="PowerBtnBrushes">
            <SolidColorBrush x:Key="true">Yellow</SolidColorBrush>
            <SolidColorBrush x:Key="false">Gray</SolidColorBrush>
        </ResourceDictionary>
    
        <ResourceDictionary x:Name="StackerErrors">
            <base:String x:Key="1">Ошибка привода</base:String>
            <base:String x:Key="2">Превышение момента ось Х</base:String>
            <base:String x:Key="3">Превышение момента ось Y</base:String>
            <base:String x:Key="4">Превышение момента ось Z</base:String>
            <base:String x:Key="5">Ошибка при референцировании</base:String>
        </ResourceDictionary>  
      </ResourceDictionary>       
    </UserControl.Resources>

Только как в этом случае Вы планируете обращаться к элементам вложенных словарей? Может, больше подойдёт обычный Dictionary или ArrayList?
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0691 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.