Постоянный выбор цвета Xamarin - PullRequest
0 голосов
/ 27 мая 2020

https://ibb.co/547mg3r - есть pi c того, что я делаю

Здравствуйте,

Я делаю кнопку и палитру цветов в приложении xamarin.forms, но я хочу сделать это, когда я выбираю один цвет (например, красный) и закрываю приложение, когда я снова открываю его, чтобы увидеть этот красный цвет автоматически c выбран. Я пытаюсь использовать этот код, но настройки не работают с цветом:

public Color ColorPicker
{
    get => Preferences.Get(nameof(ColorPicker), color.Red);
    set
    {
        Preferences.Set(nameof(ColorPicker), value);
        OnPropertyChanged(nameof(ColorPicker));
    }
}

Кто-нибудь может мне помочь?

Ответы [ 3 ]

1 голос
/ 27 мая 2020

Вы можете сохранить Xamarin.Forms.Color в виде строки, например:

public string ColorPicker
{
    get => Preferences.Get(nameof(ColorPicker), Color.Red.ToString());
    set
    {
        Preferences.Set(nameof(ColorPicker), value);
        OnPropertyChanged(nameof(ColorPicker));
    }
}

Затем вы можете привязать его, например, к Label следующим образом:

<Label TextColor="{Binding ColorPicker}" />

Убедитесь, что вы установите BindingContext в вашем представлении. Подробнее о привязке можно прочитать здесь.

0 голосов
/ 29 мая 2020

Для метода Color.FromHex(string value) требуется параметр типа string. Попробуйте преобразовать значение в строковый тип в пользовательском классе.

Проверьте код:

Класс Custom Converter

public class StringToColorConverter : IValueConverter, INotifyPropertyChanged
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var color = Color.FromHex(value as string);
        return color;
    }

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

Page.xaml

<ContentPage.Resources>
    <local:StringToColorConverter x:Key="myConverter" />
</ContentPage.Resources>


<ContentPage.Content>
    <StackLayout BackgroundColor="{Binding Color_string, Converter={StaticResource myConverter}}">
        ...
    </StackLayout>
</ContentPage.Content>
0 голосов
/ 28 мая 2020

Я не могу сделать это так. Потому что мне нужно использовать конвертер после того, как сделать строку => цвет. Я пробую это:

    public class StringToColor : IValueConverter
{
    ColorTypeConverter converter = new ColorTypeConverter();
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        //return value.ToString(); //not working
        //return (Color)(converter.ConvertFromInvariantString(value.ToString())); //not working
        return Color.FromHex(value.ToString()); //not working too
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value;
    }
}

и добавляю этот конвектор в xaml

<ContentPage.Resources>
    <ResourceDictionary>
        <local:StringToColor x:Key="str" />
    </ResourceDictionary>
</ContentPage.Resources>


    <Label Text="TEST" FontSize="Title" TextColor="{Binding ColorPicker,
    Converter={StaticResource str}}"/>

, но ничего не случилось ...

...