Есть страница, в ней подключаются стили через xaml таким образом:
<ContentPage.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<themes:MainStyles />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</ContentPage.Resources>
Сам словарь выглядит так:
<ResourceDictionary xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MyMobApp.Themes.MainStyles">
<OnPlatform x:Key="BaseFont" x:TypeArguments="x:String">
<On Platform="Android" Value="cuprum_standard.ttf#Cuprum" />
<On Platform="iOS" Value="Cuprum" />
<On Platform="UWP, WinRT, WinPhone" Value="Assets/Fonts/cuprum_standard.ttf#Cuprum" />
</OnPlatform>
<Style x:Key="Grey" TargetType="Label">
<Setter Property="FontFamily" Value="{StaticResource BaseFont}" />
<Setter Property="FontSize" Value="12" />
<Setter Property="TextColor" Value="#A0A0A0" />
</Style>
<Style x:Key="h1" TargetType="Label">
<Setter Property="TextColor" Value="#000000" />
<Setter Property="FontSize" Value="14" />
<Setter Property="FontFamily" Value="{StaticResource BaseFont}" />
</Style>
В XAML применяю стили так:
<Label Text="{Binding Date}" Margin="10,10,10,0" HeightRequest="13" Style="{StaticResource Grey}" />
Всё работает. Но затем появилась необходимость добавлять на страницу динамически Label, к которым нужно прилепить стиль Grey, например. Погуглил и нашел такой вполне логичный вариант:
this.Wrapper.Children.Add(new Label
{
Text = this._Event.Date,
Style = Application.Current.Resources["Grey"] as Style
});
НО он выбрасывает исключение System.NullReferenceException: Object reference not set to an instance of an object.
Склоняюсь к тому, что в моём случае не просто Resource, а дело в MergedDictionaries. Как в таком случае применить стиль из кода C#?
Моё предположение касательно MergedDictionaries оказалось верно. Но я не понимал, что несмотря на то, что словарь подключен в XAML, работая с ним из кода его нужно дополнительно подключать. Я сделал так:
using MyMobApp.Themes
;this.Resources = new ResourceDictionary();
Resources.MergedDictionaries.Add(new MainStyles());
При создании Label применил стиль из своего словаря
this.Wrapper.Children.Add(new Label
{
Text = this._Event.Date,
Style = Resources["Grey"] as Style
});
ADD: Если мержить словари нет необходимости (используете один, например), инициализируем объект ресурса только одним своим словарём вот так: this.Resources = new MainStyles();
и далее по схеме выше.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
На UseControl у меня есть картинка и два эллипса (круга, как угодно), я хочу связать два UseControl на холсте , вывод UseControl на холст сделан, вопрос вот...
Есть модель заказыЕсть форма на которой я работаю с этой моделью