Как правильно организовать ресурсы XAML в Silverlight?

У меня проблемы с файлами ресурсов в модульном приложении.

У меня есть Infrastructure.DLL и несколько настраиваемых элементов управления внутри этой DLL. Эти элементы управления используют шаблоны из themes/generic.xaml Проблема, которая у меня есть - Blend не распознает эти ресурсы. Visual studio делает.

В идеале я хотел бы иметь стили для моих элементов управления cusom внутри generic.xaml и стили для других элементов управления где-нибудь еще в общей библиотеке, на которую я могу ссылаться из своих модулей.

Мне также нужны Expression Blend и VS для правильной работы.

Как мне найти решение, чтобы это произошло?

PS. Важный! WPF отличается, но меня интересует решение Silverlight


person katit    schedule 18.11.2011    source источник
comment
Вы имели в виду Themes\Generic.xaml?   -  person AnthonyWJones    schedule 18.11.2011
comment
Да, это то, что я имел в виду. Я обманул пост   -  person katit    schedule 20.11.2011


Ответы (1)


Вам просто нужно создать ресурс времени разработки для вашего generic.xaml, чтобы Blend распознал его. Взгляните на этот пост.

В каждом из ваших модулей вы создаете ResourceDictionary вот так.

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
        <ResourceDictionary.MergedDictionaries>
Source="/xxx.Silverlight.Controls;component/Themes/Generic.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>

Кроме того, в вашем .csproj файле вам нужно добавить это. Обратите внимание, что обычно этот фрагмент кода автоматически генерируется Blend, поэтому, если ваш ResourceDictionary генерируется автоматически, вам не нужно делать следующее.

<Page Include="Design\DesignTimeResources.xaml" Condition="'$(DesignTime)'=='true' OR ('$(SolutionPath)'!='' AND Exists('$(SolutionPath)') AND '$(BuildingInsideVisualStudio)'!='true' AND '$(BuildingInsideExpressionBlend)'!='true')">
  <Generator>MSBuild:Compile</Generator>
  <SubType>Designer</SubType>
  <ContainsDesignTimeResources>true</ContainsDesignTimeResources>
</Page>

Дизайн - это папка, которую я создал для хранения моего DesignTimeResources.xaml. У меня почти такая же структура, как у вас. :)

person Justin XL    schedule 21.11.2011
comment
По-прежнему не работает. Я имею в виду, что это вроде как работает. Но мне все еще нужно, чтобы все точки зрения указывали на этот ресурс. - person katit; 22.11.2011
comment
Вы должны создать для него словарь ресурсов. См. Мой обновленный ответ. - person Justin XL; 22.11.2011
comment
Да, вот и все. Спасибо! Blend не хотел делать это сам, после того как я вручную отредактировал файл проекта, теперь он работает как шарм. У меня есть папка DesignData с проектными данными, и я тоже туда поместил DesignTimeResources. - person katit; 22.11.2011
comment
У меня был еще один быстрый вопрос. Вы смотрели: wintellect.com/CS/blogs/jlikness/archive/2010/09/15/? Какой смысл загружать ресурсы в код? - person katit; 22.11.2011
comment
Я думаю, что в его ситуации он загружает необходимые ссылки после загрузки основного приложения, поэтому код, стоящий за ним, - это просто втягивание темы в приложение. Однако в своем проекте я загружаю все с самого начала, поэтому мне не придется этого делать. Думаю, пока вы можете видеть свои стили в Blend и иметь возможность запускать приложение, вам не нужно этого делать. :) - person Justin XL; 22.11.2011
comment
@katit Не могли бы вы также присвоить баллы моему ответу? Спасибо! - person Justin XL; 24.11.2011