#nullable enable namespace UICatalog.Scenarios; /// /// Provides an editor UI for the Margin, Border, and Padding of a View. /// public sealed class ArrangementEditor : EditorBase { public ArrangementEditor () { Title = "ArrangementEditor"; TabStop = TabBehavior.TabGroup; Initialized += ArrangementEditor_Initialized; Add (_arrangementSelector); } private readonly FlagSelector _arrangementSelector = new () { Orientation = Orientation.Vertical }; protected override void OnViewToEditChanged () { _arrangementSelector.Enabled = ViewToEdit is not Adornment; _arrangementSelector.ValueChanged -= ArrangementFlagsOnValueChanged; // Set the appropriate options in the slider based on _viewToEdit.Arrangement if (ViewToEdit is { }) { _arrangementSelector.Value = ViewToEdit.Arrangement; } _arrangementSelector.ValueChanged += ArrangementFlagsOnValueChanged; } private void ArrangementFlagsOnValueChanged (object? sender, EventArgs e) { if (ViewToEdit is { } && e.Value is { }) { ViewToEdit.Arrangement = (ViewArrangement)e.Value; if (ViewToEdit.Arrangement.HasFlag (ViewArrangement.Overlapped)) { ViewToEdit.ShadowStyle = ShadowStyle.Transparent; ViewToEdit.SchemeName = "Runnable"; } else { ViewToEdit.ShadowStyle = ShadowStyle.None; ViewToEdit.SchemeName = ViewToEdit!.SuperView!.SchemeName; } ViewToEdit.BorderStyle = ViewToEdit.Arrangement.HasFlag (ViewArrangement.Movable) ? LineStyle.Double : LineStyle.Single; } } private void ArrangementEditor_Initialized (object? sender, EventArgs e) { _arrangementSelector.ValueChanged += ArrangementFlagsOnValueChanged; } }