Как изменить цвет фона выбора в MAC-платформе Xamarin

После обновления библиотеки Xamarin и MAC OS до последней системы возникла проблема в цвете Picker Фоновый цвет и цвет элемента, который выбран / сфокусирован в средстве выбора для MAC Platform в моей Visual Studio 2017.

Средство выбора, заполненное несколькими значениями

При открытии средства выбора не удается установить цвет фона, а выбранный элемент также не виден из-за его цвета.

Как я могу установить цвет фона этого средства выбора и цвет этого сфокусированного / выбранного элемента средства выбора?

2 ответа

Решение

Кажется, это связано с новой темой, используемой Мохаве.

Один из способов преодолеть эту проблему - установить значение, которое будет видно как на Светлом, так и на Темном цвете, для меня это сработало с Зеленым.

Добавление этого в ваш XAML должно быть достаточно

<Picker.TextColor>
    <OnPlatform x:TypeArguments="Color">
        <On Platform="macOS" Value="Green"/>
    </OnPlatform>
</Picker.TextColor>

Вносить изменения только в ваш проект MacOs, оставляя остальных такими, какие они есть.

<Picker HorizontalOptions="CenterAndExpand" 
        VerticalOptions="CenterAndExpand">
    <Picker.Items>
        <x:String>Dell</x:String>
        <x:String>HP</x:String>
        <x:String>Mac</x:String>
        <x:String>Asus</x:String>
        <x:String>Lenovo</x:String>
        <x:String>Acer</x:String>
        <x:String>Micrsoft</x:String>
    </Picker.Items>
    <Picker.TextColor>
        <OnPlatform x:TypeArguments="Color">
            <On Platform="macOS" Value="Green"/>
        </OnPlatform>
    </Picker.TextColor>
</Picker>

Обратите внимание TextColor будет влиять только на цвет текста выбранного элемента.

Надеюсь это поможет.-

Изменить BackGroundColor из всех Picker элементы для iOS, вам нужно использовать пользовательский рендерер.

Ваш Picker в общем проекте

<StackLayout>
    <Picker x:Name="picCities" ></Picker>
</StackLayout>

В вашем ContentPage назначение файла CS ItemsSource в Picker

public MainPage()
{
    InitializeComponent();
    picCities.ItemsSource = new List<string> { "Hyderabad", "Bhopal", "Indore", "Jabalpur", "Mumbai", "Ahmedabad" };
    picCities.SelectedIndex = 0;
}

Теперь в вашем проекте iOS добавьте один .cs имя файла PickerCustomRenderer & добавить этот код

[assembly: ExportRendererAttribute(typeof(Picker), typeof(PickerCustomRenderer))]
namespace picker.iOS
{
    public class PickerCustomRenderer : PickerRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
        {
            base.OnElementChanged(e);
            UITextField textField = Control;
            UIPickerView pickerView = textField.InputView as UIPickerView;
            pickerView.BackgroundColor = UIColor.Red;
        }
    }
}

Выход

Другие вопросы по тегам