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

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
#4
vote_ok
von kjaenke (1140 Punkte) - 08.11.2017 um 08:09 Uhr
Quellcode ausblenden XML-Code

<Window x:Class="Exercise_10.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Exercise_10"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="329.045">
    <Window.Resources>
        <local:AmpelstatusConverter x:Key="StateToColorConverter" />
    </Window.Resources>
    <Grid>
        <StackPanel>
            <TextBox Height="25"
                     TextAlignment="Center"
                     Name="StatusInputBox" />
        </StackPanel>
        <Ellipse Height="250"
                 Margin="0,44,0,25"
                 Fill="{Binding Path=Text, 
                                ElementName=StatusInputBox, 
                                Converter={StaticResource ResourceKey=StateToColorConverter}, 
                                ConverterParameter=Red;Orange;Green}" />
    </Grid>
</Window>


Quellcode ausblenden C#-Code
namespace Exercise_10
{
    using System;
    using System.Globalization;
    using System.Windows.Data;
    using System.Windows.Media;
    using static System.Windows.Media.ColorConverter;

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

            var solidColorBrush = new SolidColorBrush();

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

            return solidColorBrush;
        }

        object IValueConverter.ConvertBack(object value, Type targetType, object parameter, 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