2015-07-08 2 views
0

Я определил мой ResourceDictionary в отдельной библиотеке, как показано нижеResourceDictionary в отдельной библиотеке

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:cultures="clr-namespace:My_Localization.Cultures" 
    xmlns:properties="clr-namespace:My_Localization.Properties"> 

    <ObjectDataProvider x:Key="Resources" ObjectType="{x:Type cultures:CultureResources}" MethodName="GetResourceInstance"/> 

    <ObjectDataProvider x:Key="CultureResourcesDS" ObjectType="{x:Type cultures:CultureResources}"/> 

</ResourceDictionary> 

Я использовал эту библиотеку из другой библиотеки, как показано ниже (Заголовок XAML только)

<msRibbon:RibbonTab x:Class="Ribbon.Planner.PlannerRibbon" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:msRibbon="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary" 
    mc:Ignorable="d" 
    d:DesignHeight="100" d:DesignWidth="500" Header="{Binding Path=Ribbon_About, Source={StaticResource Resources}}" 
    > 
    <Grid> 
    ... 
    ... 
    ... 
    </Grid> 

У меня есть добавлена ​​ссылка My_Localization lib, и я только изменяю заголовок. Все работает нормально, но единственная проблема заключается в том, что во время разработки у меня есть «Header =» {Binding Path = Ribbon_About, Source = {StaticResource Resources}} »подчеркнуто. Когда я наводил указатель мыши на подсказку« Ресурс «Ресурсы» не мог быть решены»

почему ошибка, как намек на мой XAML, а затем почему это все работает нормально

Моя структура Решение

  1. MainExe -?. Содержит App.xaml я слили словарь ресурсов здесь. Нет проблем в xaml, поскольку словарь слияния существует в app.xaml
  2. My_Localiz ция - Lib, содержащий словарь ресурсов (код выше)
  3. Lib1 - Рекомендации My_Localization и существуют проблемы в XAML, как объяснено
  4. Lib2 - Ссылки My_Localization и существуют проблемы в XAML, как объяснено
  5. Lib3 - Ссылки My_Localization и там проблемы в XAML, как описано
+0

, потому что он объединяет только словари во время выполнения. –

+0

я так и думал, но тогда это правильно, что время разработки XAML показывает, как хотя есть ошибки? Есть ли все-таки предотвратить это? – user2837961

ответ

1

Вы должны предоставить ссылку на ResourceDictionary либо в файле app.xaml или локально. Ресурсы в app.xaml доступны глобально для всех файлов xaml приложения.

Для файлов Xaml в библиотечных проектах дизайнер работает немного по-другому.

Во время запуска это будет app.xaml в проекте запуска, который будет использоваться для всех сборок. При проектировании это будет app.xaml локальной сборки. Это означает, что вы можете добавить файл app.xaml в libraies, который будет использоваться только разработчиком Visual Studio при рендеринге xaml-файлов из этой конкретной библиотеки (Задайте действие сборки файла на Страница).

Для ссылки на ResourceDictionary это сделать:

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

      <!-- Other global resources --> 

      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="pack://application:,,,/ASSEMBLYNAME;component/FOLDERPATH/RDNAME.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 

Где AssemblyName это имя узла, где ResourceDictionary является (проверить свойства проекта).

Пример:

Проект с названием сборки: "MyAssembly" и ResourceDictionary в пути к папке «Ресурсы/РЗ/MyRd.XAML»

Source="pack://application:,,,/MyAssembly;component/Resources/RDs/MyRd.xaml" 
+0

Как добавить app.xaml в библиотеку? Вы имеете в виду просто добавить класс и назвать его app.xaml? без app.cs? – user2837961

+0

Точно. просто часть xaml. Если вы добавите ResourceDictionary с именем 'app.xaml' в корень проекта библиотеки, а затем измените узел xaml на' ', тогда он будет работать. – Anders

+0

Моя библиотека является библиотекой классов, поэтому дает ошибку в приложении «По умолчанию пространство имен не определено» – user2837961

0

в App.xaml, вы должны добавить MergedDictionary к ресурсам, которые ссылаются на ваш другой словарь.

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="pack://application:,,,/RibbonControlsLibrary;component/Your/Dictionary/Path.xaml" /> 
      ... 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 
+0

он должен сделать что-то подобное .. иначе мудрый это не сработает вообще .. –

+0

Мое приложение имеет по крайней мере 5-6 библиотек и в каждом я хочу использовать My_Localization lib. Теперь эти библиотеки не содержат app.xaml – user2837961

+0

@eranotzap А, я не знал об этом. OP, и в этом случае , вы должны поместить свой объединенный словарь в свои ресурсы RibbonTab. –

1

Вы можете включить ResourceDictionary в каждом XAML

<msRibbon:RibbonTab x:Class="Ribbon.Planner.PlannerRibbon" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:msRibbon="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary" 
    mc:Ignorable="d" 
    d:DesignHeight="100" d:DesignWidth="500" Header="{Binding Path=Ribbon_About, Source={StaticResource Resources}}"> 
    <msRibbon:RibbonTab.Resources> 
     <ResourceDictionary Source="pack://application:,,,/<ASSEMBLY_NAME>;component/<RESOURCES_FILE>.xaml"/> 
    </msRibbon:RibbonTab.Resources> 
    <Grid> 
    ... 
    ... 
    ... 
    </Grid> 
+0

Я пробовал это и работает, но если я изменю язык во время выполнения, он не изменится. – user2837961

+0

@ user2837961: вместо этого используйте 'DynamicResource'. – Anders

+0

Не работает, боюсь. Но ваше решение добавить app.xml в библиотеку отлично работает. Я использую это. – user2837961

Смежные вопросы