using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using Xamarin.Forms; //using System.Drawing; //Color.FromName(String) namespace colors { public partial class MainPage : ContentPage { public MainPage() { InitializeComponent(); // bindowanie ListView - łączenie kolorów z kolejnymi pozycjami ListView (items) this.BindingContext = new [] {"red", "green","blue","yellow","AliceBlue", "Aqua", "Aquamarine", "Azure", "BlueViolet", "Brown", "Chartreuse", "Chocolate", "Coral", "DarkCyan" }; } // pole random potrzebne do wyboru losowego koloru private Random random = new Random(); // flaga zmiany przycisku (manualny i automatyczny) private bool buttonFlag = true; // pole koloru private Color color = Color.White; // obsługa przycisku manualnej zmiany koloru void BtnManually_Clicked(object sender, System.EventArgs e) { // ustawiamy flagę przycisku - gdy właczona jest automatyczna zmiana koloru // nastąpi jej przerwanie buttonFlag = false; // pobieramy losowy kolor color = Color.FromRgb(random.Next(256), random.Next(256), random.Next(256)); // przypisujemy losowy kolor do komponentu StackLayout StackLayout.BackgroundColor = color; } // obsługa przycisku automatycznej zmiany koloru async void BtnAutomatic_Clicked(object sender, System.EventArgs e) { // ustawiamy flagę przycisku buttonFlag = true; // pętla zmiany koloru jest aktywna dopóki buttonFlag ma wartość true while (buttonFlag) { // opóżnienie w ms await Task.Delay(100); // pobieramy losowy kolor color = Color.FromRgb(random.Next(256), random.Next(256), random.Next(256)); // przypisujemy losowy kolor do komponentu StackLayout StackLayout.BackgroundColor = color; } } // obsługa zdarzenia dotknięcia pozycji ListView private async void listView_ItemTapped(object sender, ItemTappedEventArgs e) { // ustawiamy flagę przycisku - gdy właczona jest automatyczna zmiana koloru // nastąpi jej przerwanie buttonFlag = false; // pobranie wiersza ListView z nazwą koloru var item = (sender as ListView).SelectedItem; if (item != null) { // zamiana wiersza na string String itemString = item.ToString(); // wyświetlenie alertu await DisplayAlert("Wybrany kolor", itemString, "OK"); // zmieniamy kolor tła w zależności od wybranego koloru // w tym celu konwertujemy nazwę koloru (string) na zmienną color // i ustawiamy wybrany kolor var colorFromString = System.Drawing.Color.FromName(itemString); color = Color.FromRgba(colorFromString.R, colorFromString.G, colorFromString.B, colorFromString.A); StackLayout.BackgroundColor = color; /* // niepraktyczne rozwiąznaie - przy długiej liście kolorów długi switch() switch (itemString) { case "zielony": StackLayout.BackgroundColor = Color.Green; break; case "niebieski": StackLayout.BackgroundColor = Color.Blue; break; case "żółty": StackLayout.BackgroundColor = Color.Yellow; break; } */ } } } }