ColorPicker
Farbwahl in Reitern (Fläche mit Farbton und Deckkraft, Kanäle mit Zahlen und Hexwert, Palette) und darunter die Vorschau; eine zweite ohne Deckkraft mit RGB-Kanälen untereinander; zwei Farbwähler setzen Schrift- und Hintergrundfarbe einer Vorschau; eine eigene kleine Palette.


KXAML
ColorPickerSeite.kxaml
<StackPanel xmlns="https://ui.kuonen.org/kxaml"
xmlns:x="https://ui.kuonen.org/kxaml/x"
x:Class="Kuonen.UI.Galerie.Seiten.ColorPickerVorfuehrung"
Spacing="8">
<TextBlock Text="Farbwahl" FontWeight="SemiBold" />
<ColorView Color="#0078D4" Width="360" ColorChanged="Ganz_ColorChanged" />
<TextBlock Text="Ohne Deckkraft, RGB untereinander" FontWeight="SemiBold" />
<ColorView Color="#107C10" IsAlphaEnabled="False" ColorModel="Rgba" Layout="Stacked" IsColorPaletteVisible="False" Width="360"
ColorChanged="Rgb_ColorChanged" />
<TextBlock Text="Farbwähler für Schrift und Hintergrund" FontWeight="SemiBold" />
<StackPanel Orientation="Horizontal" Spacing="8">
<ColorPicker x:Name="Schrift" Color="#202020" ColorChanged="Schrift_ColorChanged" />
<ColorPicker x:Name="Grund" Color="#FFF4CE" ColorChanged="Grund_ColorChanged" />
</StackPanel>
<Border x:Name="Vorschau" Background="#FFF4CE">
<TextBlock x:Name="Beispiel" Text="Beispieltext" Foreground="#202020" Margin="12" />
</Border>
<TextBlock Text="Eigene kleine Palette" FontWeight="SemiBold" />
<ColorView x:Name="Klein" PaletteColumnCount="5" IsColorSpectrumVisible="False" IsColorComponentsVisible="False" Width="360"
ColorChanged="Klein_ColorChanged" />
<TextBlock x:Name="Meldung" Text="Bereit." />
</StackPanel>ColorPickerSeite.kxaml.cs
using Kuonen.UI;
using Kuonen.UI.Controls;
using Kuonen.UI.Media;
namespace Kuonen.UI.Galerie.Seiten;
public sealed partial class ColorPickerSeite
{
protected override Func<UIElement>? KxamlFabrik => () => new ColorPickerVorfuehrung();
}
/// <summary>KXAML-Fassung der ColorPicker-Seite: der Baum steht in ColorPickerSeite.kxaml, hier das Verhalten (Namen, kleine Palette, Meldungen).</summary>
public sealed partial class ColorPickerVorfuehrung
{
private readonly bool _bereit;
public ColorPickerVorfuehrung()
{
InitializeComponent();
Schrift.Automation.Name = "Schriftfarbe";
Grund.Automation.Name = "Hintergrundfarbe";
Klein.PaletteColors = ColorPickerSeite.KleinePalette;
_bereit = true; // die Startwerte melden nicht (wie in der C#-Fassung, die erst danach abonniert)
}
private void Melde(string was, ColorChangedEventArgs e)
{
if (_bereit) Meldung.Text = ColorPickerSeite.Meldung(was, e);
}
private void Ganz_ColorChanged(object? sender, ColorChangedEventArgs e) => Melde("Farbwahl", e);
private void Rgb_ColorChanged(object? sender, ColorChangedEventArgs e) => Melde("Ohne Deckkraft", e);
private void Schrift_ColorChanged(object? sender, ColorChangedEventArgs e)
{
Beispiel.Foreground = new SolidColorBrush(e.NewColor);
Melde("Schrift", e);
}
private void Grund_ColorChanged(object? sender, ColorChangedEventArgs e)
{
Vorschau.Background = new SolidColorBrush(e.NewColor);
Melde("Hintergrund", e);
}
private void Klein_ColorChanged(object? sender, ColorChangedEventArgs e) => Melde("Kleine Palette", e);
}C#
ColorPickerSeite.cs
using Kuonen.UI;
using Kuonen.UI.Controls;
using Kuonen.UI.Layout;
using Kuonen.UI.Media;
namespace Kuonen.UI.Galerie.Seiten;
/// <summary>Galerie-Seite: <see cref="ColorView"/> und <see cref="ColorPicker"/>.</summary>
public sealed partial class ColorPickerSeite : GalerieSeite
{
public override string Titel => "ColorPicker";
public override string Beschreibung =>
"Farbwahl in Reitern (Fläche mit Farbton und Deckkraft, Kanäle mit Zahlen und Hexwert, Palette) und darunter die Vorschau; eine zweite ohne Deckkraft "
+ "mit RGB-Kanälen untereinander; zwei Farbwähler setzen Schrift- und Hintergrundfarbe einer Vorschau; eine eigene kleine Palette.";
public override string Stichworte => "Farbe Farbwahl Farbwähler Palette Hex RGB HSV Farbton Deckkraft Alpha ColorPicker ColorView ColorSpectrum ColorDialog";
public override string Datei => nameof(ColorPickerSeite);
/// <summary>Die kleine eigene Palette der Seite.</summary>
internal static readonly Color[] KleinePalette =
[Color.FromRgb(0xD1, 0x34, 0x38), Color.FromRgb(0xFF, 0xB9, 0x00), Color.FromRgb(0x10, 0x7C, 0x10), Color.FromRgb(0x00, 0x78, 0xD4), Color.FromRgb(0x5C, 0x2D, 0x91)];
internal static string Meldung(string was, ColorChangedEventArgs e) => $"{was}: #{e.NewColor.A:X2}{e.NewColor.R:X2}{e.NewColor.G:X2}{e.NewColor.B:X2}";
public override UIElement Baue()
{
var meldung = new TextBlock { Text = "Bereit." };
var ganz = new ColorView { Color = Color.FromRgb(0x00, 0x78, 0xD4), Width = 360 };
ganz.ColorChanged += (_, e) => meldung.Text = Meldung("Farbwahl", e);
var rgb = new ColorView { Color = Color.FromRgb(0x10, 0x7C, 0x10), IsAlphaEnabled = false, ColorModel = ColorModel.Rgba, Layout = ColorViewLayout.Stacked, IsColorPaletteVisible = false, Width = 360 };
rgb.ColorChanged += (_, e) => meldung.Text = Meldung("Ohne Deckkraft", e);
var text = new TextBlock { Text = "Beispieltext", Foreground = new SolidColorBrush(Color.FromRgb(0x20, 0x20, 0x20)), Margin = new Thickness(12) };
var vorschau = new Border { Background = new SolidColorBrush(Color.FromRgb(0xFF, 0xF4, 0xCE)), Child = text };
var schrift = new ColorPicker { Color = Color.FromRgb(0x20, 0x20, 0x20) };
schrift.Automation.Name = "Schriftfarbe";
schrift.ColorChanged += (_, e) =>
{
text.Foreground = new SolidColorBrush(e.NewColor);
meldung.Text = Meldung("Schrift", e);
};
var grund = new ColorPicker { Color = Color.FromRgb(0xFF, 0xF4, 0xCE) };
grund.Automation.Name = "Hintergrundfarbe";
grund.ColorChanged += (_, e) =>
{
vorschau.Background = new SolidColorBrush(e.NewColor);
meldung.Text = Meldung("Hintergrund", e);
};
var klein = new ColorView { PaletteColors = KleinePalette, PaletteColumnCount = 5, IsColorSpectrumVisible = false, IsColorComponentsVisible = false, Width = 360 };
klein.ColorChanged += (_, e) => meldung.Text = Meldung("Kleine Palette", e);
return new StackPanel
{
Spacing = 8,
Children =
{
new TextBlock { Text = "Farbwahl", FontWeight = 600 },
ganz,
new TextBlock { Text = "Ohne Deckkraft, RGB untereinander", FontWeight = 600 },
rgb,
new TextBlock { Text = "Farbwähler für Schrift und Hintergrund", FontWeight = 600 },
new StackPanel { Orientation = Orientation.Horizontal, Spacing = 8, Children = { schrift, grund } },
vorschau,
new TextBlock { Text = "Eigene kleine Palette", FontWeight = 600 },
klein,
meldung,
},
};
}
}