Как динамически изменить ресурс BackgroundColor?
У меня есть следующий контроль. Я хочу изменить цвет фона для какого-либо события. Я хочу сделать это clrGray
ресурс как цвет на каком-то событии клик.
Я пытался следующим образом, но это не сработало:(
XAM:
<local:RoundedFrame x:Name="MyFrame1" HeightRequest="16" IsVisible="True" BackgroundColor="{DynamicResource clrGreen}">
CS:
//On Some event
//Not working
MyFrame1.SetDynamicResource(MyFrame1.BackgroundColor, "clrGreen");
2 ответа
Решение
Используйте динамические ресурсы Xamarin.Forms. Ниже приведена ссылка на документацию Xamarin:
https://developer.xamarin.com/guides/xamarin-forms/user-interface/styles/dynamic/
Они очень просты в использовании / реализации и делают именно то, что вы хотите.
Вы можете изменить цвет динамически, как это: App.Current.Resources["yourColorKey"] = Color.FromHex("hexColor");
Пример:
Ваш файл App.xaml:
<Application.Resources>
<!-- Application resource dictionary -->
<ResourceDictionary>
<Color x:Key="backgroundColor">#0066B3</Color>
</ResourceDictionary>
</Application.Resources>
Ваш файл xaml:
<StackLayout>
<StackLayout
Margin="10"
BackgroundColor="{DynamicResource backgroundColor}"
HeightRequest="30"
WidthRequest="30" />
<Button x:Name="btnColorChange" Text="Click me!" />
</StackLayout>
В вашем обработчике событий:
private void OnBtnClicked(object sender, EventArgs e)
{
App.Current.Resources["backgroundColor"] = Color.FromHex("#F15A29");
}