C# :: Aufgabe #10 :: Lösung #3

6 Lösungen Lösungen öffentlich
#10

Color ValueConverter für XAML - Ampelstatus

Fortgeschrittener - C# von pocki - 28.08.2012 um 09:59 Uhr
Schreibe einen ValueConverter für XAML (WPF, Silverlight) wobei je nach Integer-Wert (Variable Zustand) eine Ellipse eine bestimmte Farbe zugewiesen wird.

Verwende folgenden XAML-Ansatz:
Quellcode ausblenden XML-Code
<Ellipse Fill={Binding Path=Zustand, Converter={StaticResource ResourceKey=StateToColorConverter}, ConverterParameter=Red;Orange;Green}/>


Wobei die Zuordnung wiefolgt sein soll:
Quellcode ausblenden C#-Code
Zustand=1; //Red
Zustand=2; //Orange
Zustand=3; //Green
//Für alle anderen Zustandswerte: Transparent
#3
2x
vote_ok
von mty (690 Punkte) - 09.11.2015 um 17:13 Uhr
Quellcode ausblenden XML-Code
<Window x:Class="Ampelstatus.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
		xmlns:local="clr-namespace:Ampelstatus"
        Title="MainWindow" Height="350" Width="250">
	<Window.Resources>
		<local:AmpelstatusConverter x:Key="StateToColorConverter" />
	</Window.Resources>
    <Grid>
		<StackPanel>
			<TextBox Height="25" TextAlignment="Center" Name="ZustandTextBox" />
		</StackPanel>
		<Ellipse Height="250" Margin="0,20,0,0" 
				 Fill="{Binding Path=Text,ElementName=ZustandTextBox, Converter={StaticResource ResourceKey=StateToColorConverter}, ConverterParameter=Red;Orange;Green}"/>
	</Grid>
</Window>

Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;
using System.Windows.Media;

namespace Ampelstatus
{
	public class AmpelstatusConverter : IValueConverter
	{
		object IValueConverter.Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
		{
			var p = parameter as string;
			string[] farben = p.Split(';');

			SolidColorBrush solidColorBrush = new SolidColorBrush();
			
			switch(value as string){
				case "1":
					solidColorBrush.Color = (Color)ColorConverter.ConvertFromString(farben[0]);
					break;
				case "2":
					solidColorBrush.Color = (Color)ColorConverter.ConvertFromString(farben[1]);
					break;
				case "3":
					solidColorBrush.Color = (Color)ColorConverter.ConvertFromString(farben[2]);
					break;
			}

			return solidColorBrush;
		}

		object IValueConverter.ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
		{
			return value;
		}
	}
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
2165768

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.