Использование стиля из другой сборки в приложении Metro - PullRequest
4 голосов
/ 28 марта 2012

Я начинаю с Windows 8 C # Образец пользовательского и пользовательского элементов управления XAML и перемещаю файлы

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

в библиотеку классов Metro с именем 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.

Ответы [ 2 ]

10 голосов
/ 28 марта 2012

Ваш исходный путь неверен, так как синтаксис компонента не поддерживается.Если предположить, что ваша 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.

4 голосов
/ 29 марта 2012

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

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

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

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

С папкой Themes в пути к исходному коду для проектов C #.

и

Для проектов VB.Net файл App.xaml должен содержать:

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

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

...