Несколько пользовательских шрифтов для приложения без определенного TargetType - PullRequest
0 голосов
/ 28 апреля 2018

Я пытаюсь импортировать два пользовательских шрифта в мое приложение. На данный момент я добавил шрифты соответственно в каталоги .Droid/Assets и .iOS/Resources и для iOS загрузил их в свой Info.plist.

В моем App.xaml я делаю следующее, чтобы загрузить шрифты в мой PCL:

<Application.Resources>
    <ResourceDictionary>
        <Style x:Name="BoldFont" TargetType="Label">
            <Setter Property="Label.FontFamily">
                <Setter.Value>
                    <OnPlatform x:TypeArguments="x:String">
                        <OnPlatform.Android>PT_Sans-Narrow-Web-Regular.ttf#PT Sans Narrow</OnPlatform.Android>
                        <OnPlatform.iOS>PT Sans Narrow</OnPlatform.iOS>
                    </OnPlatform>
                </Setter.Value>
            </Setter>
        </Style>
    </ResourceDictionary>
</Application.Resources>

Однако я хотел бы иметь возможность использовать несколько шрифтов в своих ярлыках, поэтому я добавил следующий код в <ResourceDictionary>:

<Style x:Name="RegularFont" TargetType="Label">
    <Setter Property="Label.FontFamily">
        <Setter.Value>
            <OnPlatform x:TypeArguments="x:String">
                <OnPlatform.Android>RobotoCondensed-Regular.ttf#Roboto Condensed</OnPlatform.Android>
                <OnPlatform.iOS>Roboto Condensed</OnPlatform.iOS>
            </OnPlatform>
        </Setter.Value>
    </Setter>
</Style>

К сожалению, я получаю сообщение об ошибке:

Ресурс с ключом 'Xamarin.Forms.Label' уже присутствует в ResourceDictionary

Кроме того, действительно ли я должен сделать свой TargetType специфичным для метки, если, скажем, я хочу использовать шрифты глобально, независимо от того, является ли он Label или Entry?

1 Ответ

0 голосов
/ 28 апреля 2018

Во-первых, со стилем используйте x: Key вместо x: Name. Это позволит избежать появления сообщения об ошибке.

<Style x:Key="RegularFont" TargetType="Label">
    <Setter Property="Label.FontFamily">
        <Setter.Value>
            <OnPlatform x:TypeArguments="x:String">
                <OnPlatform.Android>RobotoCondensed-Regular.ttf#Roboto Condensed</OnPlatform.Android>
                <OnPlatform.iOS>Roboto Condensed</OnPlatform.iOS>
            </OnPlatform>
        </Setter.Value>
    </Setter>
</Style>

Иногда вы можете обмениваться определениями стилей между типами. Лучший способ сделать это - использовать TargetType, который является общим базовым классом, который определяет свойства, которые вы хотите установить. К сожалению, между Label и Entry нет такого общего базового класса. Каждый из них независимо определяет FontFamily.

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