Как управлять ресурсом приложения для библиотеки пользовательского интерфейса, когда Application.Resource влияет на внешний вид элемента управления библиотеки? - PullRequest
0 голосов
/ 28 июня 2019

Я занимаюсь разработкой проекта библиотеки UI.Он содержит набор страниц, которые будут использоваться в двух разных проектах приложений UWP.Проблема в том, что в одном проекте разработчики используют тему, которая изменяет внешний вид основных элементов управления, таких как размер шрифта текстового блока или TextBox, поля ContentControls и т. Д. В моей библиотеке я использовал довольно простое текстовое поле элементов управления, выпадающий список, сборщик дат.Это влияет на внешний вид страниц библиотеки UI, над которой я работаю.Я хочу, чтобы страницы в моей библиотеке выглядели как базовая форма ввода.Как я могу сказать библиотеке UI не следовать какой-либо теме, которую использует Приложение?

1 Ответ

1 голос
/ 01 июля 2019

Как я могу указать библиотеке UI не следовать какой-либо теме, используемой приложением?

Вы можете добавить файл 'Resource Dictionary' в свой проект библиотеки UI. В файле 'dictionary.xaml' вы можете определить базовый стиль для элементов управления, который используется на страницах вашей библиотеки пользовательского интерфейса. Тогда на элементы управления не будет влиять стиль ресурса в основном проекте.

Например, я добавляю файл 'generic.xaml' в проект библиотеки UI и определяю стиль для кнопки, как показано ниже:

<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:ClassLibraryUI">
    <Style TargetType="Button" BasedOn="{StaticResource ButtonRevealStyle}">
    </Style>
</ResourceDictionary>

У меня есть «BlankPage1.xaml» в библиотеке пользовательского интерфейса.

<Page
x:Class="ClassLibraryUI.BlankPage1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:ClassLibraryUI"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Page.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="generic.xaml"></ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Page.Resources>
<Grid>
    <Button Content="Hello UWP"></Button>
</Grid>
</Page>

В основном проекте я определил стиль для кнопки в 'App.xaml':

<Application
x:Class="AppUI.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:AppUI">
<Application.Resources>
    <Style TargetType="Button">
        <Setter Property="Foreground" Value="Red"></Setter>
        <Setter Property="Background" Value="LightBlue"></Setter>
        <Setter Property="Width" Value="200"></Setter>
        <Setter Property="Height" Value="50"></Setter>
    </Style>
</Application.Resources>
</Application>

На MainPage.xaml:

<StackPanel>
    <Button Content="Navigate" Click="Button_Click"></Button>
    <Frame x:Name="frame"></Frame>
</StackPanel>

В «MainPage.xaml.cs» я использую элемент управления Frame для перехода к «BalnkPage1» в библиотеке пользовательского интерфейса.

Вы увидите, что кнопка «Navigate» на главной странице будет использовать стиль в «Application.Resources», но кнопка «BlankPage1» будет использовать стиль в своем собственном файле «generic.xaml».

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