2012-03-28 1 views
4

я начинаю с Windows 8 C# XAML user and custom controls sample и переместили файлыИспользование стиля от другого узла в приложении Metro

Themes/Generic.xaml 
BasicCustomControl.cs 
BasicUserControl.xaml 
BasicUserControl.xaml.cs 
ImageWithLabelControl.cs 

в библиотеку метро класса с именем Controls, ссылаться на него в проекте UserAndCustomControls и исправить local:... ссылки xmlns:local="using:Controls". Это отлично работает.

НО если создать словарь ресурсов "Style.xaml" в библиотеке классов с

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:Controls"> 
    <Color x:Key="ColorBackground">Red</Color>  
</ResourceDictionary> 

и включить в файл ScenarioList.xaml

<Page.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="/Controls;component/Style.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Page.Resources> 

я получаю сообщение об ошибке во время выполнения

XamlParseException 
Failed to assign to property 'Windows.UI.Xaml.ResourceDictionary.Source'. 

если я попробую применить цвет к сетке

<Grid> 
    <Grid.Background> 
     <SolidColorBrush Color="{StaticResource ColorBackground}" /> 
    </Grid.Background> 

    <ListBox x:Name="Scenarios" ... 
    [...] 
</Grid> 

[Q] Вопрос в том, как я правильно объявить, ссылки и использовать внешний стиль в приложении Metro? Моя идея заключается в создании многоразовых элементов управления и общих стилей, поставляемых как один файл dll.

ответ

4

navits указывает на ответ.

Если у вас есть dll с именем «CustomControl» с ResourceDictionary с именем «Styles.xaml», содержится папка с именем «Темы».

Для проектов C# App.xaml должен содержать:

<ResourceDictionary> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="ms-appx:///CustomControls/Themes/Styles.xaml"/> 
    </ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 

СThemes папки в пути Source, для C# проектов.

и

Для VB.Net проецирует App.xaml должен содержать:

<ResourceDictionary> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="ms-appx:///CustomControls/Styles.xaml"/> 
    </ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 

БезThemes папки в исходном пути, для проектов VB.Net.

10

Исходный путь неправильный, поскольку синтаксис компонента не поддерживается. Если предположить, что контроль библиотеки DLL называется «Controls», то это будет выглядеть так:

<ResourceDictionary Source="ms-appx:///Controls/Files/Style.xaml" /> 

Вы можете посмотреть на http://timheuer.com/blog/archive/2012/03/07/creating-custom-controls-for-metro-style-apps.aspx для более глубокого объяснения.

+0

У меня нет отдельной библиотеки DLL для словаря Resorce, но у меня она есть в папке «Common» в том же .csproj, и я включаю этот путь как «' в App.xaml. Но, я все еще получаю ту же ошибку ??? –

+3

Этот ответ работает, но очень важно отметить, что он не будет, если имя вашей ссылочной сборки содержит пробелы или точки и, возможно, другие не буквенно-цифровые символы. Это ошибка в Visual Studio 2012, которая почти загнала меня в орехи, пока я не попробовал другое название проекта для библиотеки –