#xamarin #xamarin.forms #xamarin.android
#xamarin #xamarin.forms #xamarin.android
Вопрос:
В каком случае предварительный просмотр цвета DynamicResource не отображается?
Я ожидал этого: с предварительным просмотром цвета стиля
Приведенное выше взято из другого примера проекта с поведением, которое я пытаюсь воспроизвести.
Вместо этого у меня есть что-то вроде этого:
введите описание изображения здесь
SimpleEmailEntry.xaml:
<?xml version="1.0" encoding="UTF-8" ?>
<ContentView
x:Class="MyApp.Views.LoginForms.SimpleEmailEntry"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:border="clr-namespace:Syncfusion.XForms.Border;assembly=Syncfusion.Core.XForms"
xmlns:control="clr-namespace:MyApp.Controls"
xmlns:converter="clr-namespace:MyApp.Converters">
<ContentView.Resources>
<ResourceDictionary>
<converter:StringToBooleanConverter x:Key="StringToBooleanConverter" />
<converter:ErrorValidationColorConverter x:Key="ErrorValidationColorConverter" PageVariantParameter="1" />
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="../Styles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</ContentView.Resources>
<ContentView.Content>
<StackLayout>
<border:SfBorder
BackgroundColor="{DynamicResource Gray-White}"
BorderColor="{Binding Path=IsFocused, Source={x:Reference EmailEntry}, Converter={x:StaticResource ErrorValidationColorConverter}, ConverterParameter={x:Reference EmailEntry}}"
Style="{StaticResource SfBorderStyle}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<control:BorderlessEntry
x:Name="EmailEntry"
Placeholder="Email" Keyboard="Email"
PlaceholderColor="{DynamicResource Gray-700}"
Style="{StaticResource EntryStyle}"
Text="{Binding Email}"
TextColor="{DynamicResource Gray-900}" />
<Label
Margin="15,0"
FontFamily="{StaticResource FontIcons}"
FontSize="18"
HorizontalOptions="EndAndExpand"
HorizontalTextAlignment="End"
IsVisible="{Binding Path=IsVisible, Source={x:Reference ValidationLabel}}"
Text="amp;#xe707;"
TextColor="{DynamicResource Red}"
VerticalOptions="Center" />
</Grid>
</border:SfBorder>
<Label
x:Name="ValidationLabel"
Margin="15,-5,0,0"
FontSize="12"
IsVisible="{Binding Path=IsFocused, Source={x:Reference EmailEntry}, Converter={StaticResource StringToBooleanConverter}, ConverterParameter={x:Reference EmailEntry}}"
Text="Please enter the valid e-mail"
TextColor="{DynamicResource Red}"
VerticalOptions="FillAndExpand" />
</StackLayout>
</ContentView.Content>
</ContentView>
App.xaml:
<?xml version="1.0" encoding="utf-8" ?>
<prism:PrismApplication xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:prism="http://prismlibrary.com"
x:Class="MyApp.App"
xmlns:themes = "clr-namespace:MyApp.Themes;assembly=MyApp">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<themes:LightTheme />
</ResourceDictionary.MergedDictionaries >
</ResourceDictionary>
</Application.Resources>
</prism:PrismApplication>
LightTheme.xaml:
<?xml version="1.0" encoding="utf-8" ?>
<ResourceDictionary
x:Class="MyApp.Themes.LightTheme"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
<Color x:Key="PrimaryColor">#f54e5e</Color>
<Color x:Key="PrimaryDarkColor">#d0424f</Color>
<Color x:Key="PrimaryDarkenColor">#ab3641</Color>
<Color x:Key="PrimaryLighterColor">#edcacd</Color>
<Color x:Key="PrimaryGradient">#e83f94</Color>
<Color x:Key="PrimaryLight">#ffe8f4</Color>
<Color x:Key="SecondaryGradient">#7644ad</Color>
<Color x:Key="Secondary">#d54381</Color>
<Color x:Key="Green">#7ed321</Color>
<Color x:Key="Red">#ff4a4a</Color>
<Color x:Key="Orange">#ff844a</Color>
<Color x:Key="Blue">#4acaff</Color>
<Color x:Key="HyperLink">#567cd7</Color>
<Color x:Key="Gray-100">#f6f7f8</Color>
<Color x:Key="Gray-200">#ebecef</Color>
<Color x:Key="Gray-300">#ced2d9</Color>
<Color x:Key="Gray-400">#b2b8c2</Color>
<Color x:Key="Gray-500">#959eac</Color>
<Color x:Key="Gray-600">#788396</Color>
<Color x:Key="Gray-700">#606a7b</Color>
<Color x:Key="Gray-800">#4a515e</Color>
<Color x:Key="Gray-900">#333942</Color>
<Color x:Key="Gray-Black">#000000</Color>
<Color x:Key="Gray-White">#ffffff</Color>
<OnPlatform x:Key="FontIcons" x:TypeArguments="x:String">
<OnPlatform.Platforms>
<On Platform="Android" Value="UIFontIcons.ttf#UIFontIcons" />
<On Platform="iOS" Value="UIFontIcons" />
<On Platform="UWP" Value="Assets/UIFontIcons.ttf#UIFontIcons" />
</OnPlatform.Platforms>
</OnPlatform>
<OnPlatform x:Key="Montserrat-SemiBold" x:TypeArguments="x:String">
<OnPlatform.Platforms>
<On Platform="Android" Value="Montserrat-SemiBold.ttf#Montserrat-SemiBold" />
<On Platform="iOS" Value="Montserrat-SemiBold" />
<On Platform="UWP" Value="Assets/Montserrat-SemiBold.ttf#Montserrat-SemiBold" />
</OnPlatform.Platforms>
</OnPlatform>
<OnPlatform x:Key="Montserrat-Regular" x:TypeArguments="x:String">
<OnPlatform.Platforms>
<On Platform="Android" Value="Montserrat-Regular.ttf#Montserrat-Regular" />
<On Platform="iOS" Value="Montserrat-Regular" />
<On Platform="UWP" Value="Assets/Montserrat-Regular.ttf#Montserrat-Regular" />
</OnPlatform.Platforms>
</OnPlatform>
<OnPlatform x:Key="Montserrat-Medium" x:TypeArguments="x:String">
<OnPlatform.Platforms>
<On Platform="Android" Value="Montserrat-Medium.ttf#Montserrat-Medium" />
<On Platform="iOS" Value="Montserrat-Medium" />
<On Platform="UWP" Value="Assets/Montserrat-Medium.ttf#Montserrat-Medium" />
</OnPlatform.Platforms>
</OnPlatform>
<OnPlatform x:Key="Montserrat-Bold" x:TypeArguments="x:String">
<OnPlatform.Platforms>
<On Platform="Android" Value="Montserrat-Bold.ttf#Montserrat-Bold" />
<On Platform="iOS" Value="Montserrat-Bold" />
<On Platform="UWP" Value="Assets/Montserrat-Bold.ttf#Montserrat-Bold" />
</OnPlatform.Platforms>
</OnPlatform>
</ResourceDictionary>
Спасибо, ребята!
Ответ №1:
Я думаю, вы неправильно используете словари ресурсов. Проверьте следующие шаги.
-
Создайте
LightTheme.xaml
в своем проекте. -
Предположим, что
LightTheme.xaml
они находятся в той же сборке. Если вы хотите использовать словари ресурсов из других сборок, вы можете добавить их в свойство MergedDictionaries в ResourceDictionary . https://learn.microsoft.com/en-us/xamarin/xamarin-forms/xaml/resource-dictionaries#merge-resource-dictionaries-from-other-assembliesУстановите словари ресурсов в
SimpleEmailEntry.xaml
:<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="ResourceDictionaryDemo.HomePage"> <ResourceDictionary> <ResourceDictionary Source="LightTheme.xaml" /> </ResourceDictionary> </ContentPage>
-
Используйте цвет с ключом.
<Label BackgroundColor="{DynamicResource Key=Gray-Black}" FontAttributes="Bold" HorizontalOptions="Center" Text="ListView with a DataTemplateSelector" />