Единое место для ресурсов, используемых в файлах XAML и CS? - PullRequest
0 голосов
/ 13 марта 2019

Бывает, что я определяю ResourceDictionary для цветов приложения, чтобы использовать его в файлах XAML, и у меня есть статический класс для этих цветов для использования в коде cs: например:

<ResourceDictionary 
    xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
    x:Class="MyApp.Themes.AppTheme">
    <Color x:Key="BrandColor">#ffd92e</Color>
    <Color x:Key="BgColor">#343433</Color>
</ResourceDictionary>

И противоположный класс:

public static class AppColors
{
    public static readonly Color BrandColor = (Color)Application.Current.Resources["BrandColor"];
    public static readonly Color BGColor = (Color)Application.Current.Resources["BgColor"];
}

Другой сценарий, я использую шрифт значков в xaml и cs, в XAML он выглядит как &#xe8d5;, а в cs это: \ue8d5.Я хочу сохранить их в файле, где я могу ссылаться на них с помощью значимых имен в XAML и таких как: IconBell = \ue8d5

Можно ли определить ресурсы, подобные тем, в одном месте, и использовать их как в XAML, так и вкод

1 Ответ

0 голосов
/ 13 марта 2019

О проблеме цветов, ее очень легко решить.В основном вам нужно создать класс, содержащий ваши цвета, и ссылаться на него в вашем XAML с расширением x: Static .

Вы можете сделать то же самое для решения проблемы с иконками, но вам, вероятно, потребуется создать конвертер для использования его в XAML.Например, важной частью значения вашего значка является часть "e8d5" , но в C # вы используете "\ u", а в XAML вы используете "& # x".Вам нужно будет создать класс с иконками, сослаться на него в XAML с помощью расширения x: Static и использовать конвертер для преобразования из C # в XAML, например:

public class IconConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        try
        {
            string icon = System.Convert.ToString(value);
            return icon.Replace("\u", "&#x");
        }
        catch (Exception)
        {
            throw new InvalidCastException("The value is not a valid string.");
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

С этим выможет объединить ваши стили в уникальный класс C # и просто сослаться на него в вашем XAML.

...