Forge
csharpdeeb25a2
1using Avalonia;
2using Avalonia.Controls;
3using CascadeIDE.Services.ChordNotation;
4
5namespace CascadeIDE.Views;
6
7/// <summary>Горизонтальные ряды «клавиш» для последовательности аккордов (кэпы, не plain text).</summary>
8public partial class ChordKeycapStrip : UserControl
9{
10 public static readonly StyledProperty<ChordKeycapSequence?> SequenceProperty =
11 AvaloniaProperty.Register<ChordKeycapStrip, ChordKeycapSequence?>(nameof(Sequence));
12
13 static ChordKeycapStrip()
14 {
15 SequenceProperty.Changed.AddClassHandler<ChordKeycapStrip>(OnSequenceChanged);
16 }
17
18 public ChordKeycapSequence? Sequence
19 {
20 get => GetValue(SequenceProperty);
21 set => SetValue(SequenceProperty, value);
22 }
23
24 private ItemsControl? _stepsHost;
25
26 public ChordKeycapStrip()
27 {
28 InitializeComponent();
29 _stepsHost = this.FindControl<ItemsControl>(nameof(StepsHost));
30 SyncItemsSource();
31 }
32
33 private static void OnSequenceChanged(ChordKeycapStrip strip, AvaloniaPropertyChangedEventArgs e) =>
34 strip.SyncItemsSource();
35
36 private void SyncItemsSource()
37 {
38 if (_stepsHost is null)
39 return;
40 _stepsHost.ItemsSource = Sequence?.Steps ?? Array.Empty<ChordKeycapStep>();
41 }
42}
43
View only · write via MCP/CIDE