Общий xaml-файл не добавляется в ресурсы в библиотеке классов UWP - PullRequest
0 голосов
/ 05 июля 2019

Итак, у меня, казалось бы, простая настройка, но по какой-то причине мое приложение UWP не обрабатывает мой Generic.xaml файл

У меня есть общая библиотека классов, предназначенная для 16299, и ее минимальная версия составляет 16299.

Я создал каталог Themes и поместил в него файл Generic.xaml, который является словарем ресурсов.

Внутри этого я попытался добавить стиль, а затем сослаться на него по ключу, но приложение UWPне может найти стиль.

Например

Generic.xaml

<Style TargetType="ListViewItem" x:Key="ListViewItemEvenRowStyle" >
    <Setter Property="Padding" Value="0" />
    <Setter Property="Background" Value="Black" />
    <Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>

<Style TargetType="ListViewItem" x:Key="ListViewItemOddRowStyle" >
    <Setter Property="Padding" Value="0" />
    <Setter Property="Background" Value="White" />
    <Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>

Что приводит к этому исключению, когда я ссылаюсь на него с StaticResource

Windows.UI.Xaml.Markup.XamlParseException: 'Не найден текст, связанный с этим кодом ошибки.

Не удается найти ресурс с именем / ключом ListViewItemEvenRowStyle

Я также пытался вставить это в ResourceDictionary.ThemeResources и ссылаться на него с ThemeResource, но продолжаю получать тот же результат.

Это определение CSProj

<Page Include="Themes\Generic.xaml">
  <Generator>MSBuild:Compile</Generator>
  <SubType>Designer</SubType>
</Page>

1 Ответ

0 голосов
/ 08 июля 2019

Вам необходимо использовать ResourceDictionary.MergedDictionaries вместо ResourceDictionary.ThemeResources.

В вашем основном проекте UWP откройте файл App.xaml и добавьте следующий код:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="YourClassLibrary/Themes/Generic.xaml"></ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

Дополнительную информацию см. Ресурсы тем XAML и ResourceDictionary.MergedDictionaries .

[Обновлено 2019/7/10]

Мне интересно, как Infragistics, Telerik и Microsoft UWP.Toolkit удается это сделать.Если я добавляю элемент управления telerik в свой проект и ссылаюсь на их элементы управления, мне не нужно ничего добавлять в свои словари ресурсов.

Telerik и WindowsCommunityToolkit с открытым исходным кодом.Вы можете проверить их исходный код.Эти элементы управления являются пользовательскими элементами управления.Каждый элемент управления имеет свой собственный файл стиля, и он будет применен к нему в методе конструктора элемента управления путем установки DefaultStyleKey = typeof(YourCustomControlClass).

Например, Microsoft.Toolkit.Uwp.UI.Controls / Carousel / контроль.Вы могли видеть, что файл стиля Carousel.xaml находится в той же папке, что и класс Carousel.cs.В конструкторе Carousel он применяет DefaultStyleKey = typeof(Carousel); для применения стиля.Но только с этими шагами система все еще не может найти соответствующий стиль.Вы можете увидеть папку Microsoft.Toolkit.Uwp.UI.Controls / Themes / , там есть файл Generic.xaml.На самом деле это ResourceDictionary.Он использует ResourceDictionary.MergedDictionaries для объединения ресурсов в различных пользовательских папках элементов управления.

Таким образом, главному проекту просто нужно добавить ссылку на вашу библиотеку элементов управления и использовать элементы управления напрямую, не используя ResourceDictionary.MergedDictionaries в основном проекте..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...