Skip to content

Commit 893cd61

Browse files
committed
ButtonSpinner: demo words, styling & cleanup
1 parent 7eaec45 commit 893cd61

4 files changed

Lines changed: 87 additions & 33 deletions

File tree

src/Wpf.Ui.Test/MainWindow.xaml

Lines changed: 57 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3996,82 +3996,120 @@
39963996

39973997
</StackPanel>
39983998

3999-
<!-- ══════════════════════════════════════════════════════════════
4000-
ButtonSpinner Demo
4001-
══════════════════════════════════════════════════════════════ -->
3999+
<!--
4000+
══════════════════════════════════════════════════════════════
4001+
ButtonSpinner Demo
4002+
══════════════════════════════════════════════════════════════
4003+
-->
40024004
<StackPanel Margin="0,16,0,0" Orientation="Vertical">
40034005
<TextBlock
40044006
FontSize="16"
40054007
FontWeight="SemiBold"
40064008
Text="ButtonSpinner" />
40074009

40084010
<!-- Default (grouped buttons, right) -->
4009-
<StackPanel Margin="0,8,0,0" Orientation="Horizontal" VerticalAlignment="Center">
4011+
<StackPanel
4012+
Margin="0,8,0,0"
4013+
VerticalAlignment="Center"
4014+
Orientation="Horizontal">
40104015
<TextBlock
40114016
MinWidth="220"
40124017
VerticalAlignment="Center"
40134018
Text="Default — buttons right" />
40144019
<vio:ButtonSpinner Width="200" Spin="ButtonSpinnerDemo_OnSpin">
4015-
<TextBlock x:Name="ButtonSpinnerDefaultValueText" Text="Value: 0" VerticalAlignment="Center" />
4020+
<TextBlock
4021+
x:Name="ButtonSpinnerDefaultValueText"
4022+
VerticalAlignment="Center"
4023+
Text="Apple" />
40164024
</vio:ButtonSpinner>
40174025
</StackPanel>
40184026

40194027
<!-- Default, buttons on the left -->
4020-
<StackPanel Margin="0,8,0,0" Orientation="Horizontal" VerticalAlignment="Center">
4028+
<StackPanel
4029+
Margin="0,8,0,0"
4030+
VerticalAlignment="Center"
4031+
Orientation="Horizontal">
40214032
<TextBlock
40224033
MinWidth="220"
40234034
VerticalAlignment="Center"
40244035
Text="ButtonSpinnerLocation=Left" />
4025-
<vio:ButtonSpinner Width="200" ButtonSpinnerLocation="Left" Spin="ButtonSpinnerDemo_OnSpin">
4026-
<TextBlock x:Name="ButtonSpinnerLeftValueText" Text="Value: 0" VerticalAlignment="Center" />
4036+
<vio:ButtonSpinner
4037+
Width="200"
4038+
ButtonSpinnerLocation="Left"
4039+
Spin="ButtonSpinnerDemo_OnSpin">
4040+
<TextBlock
4041+
x:Name="ButtonSpinnerLeftValueText"
4042+
VerticalAlignment="Center"
4043+
Text="Apple" />
40274044
</vio:ButtonSpinner>
40284045
</StackPanel>
40294046

40304047
<!-- ShowButtonSpinner = False -->
4031-
<StackPanel Margin="0,8,0,0" Orientation="Horizontal" VerticalAlignment="Center">
4048+
<StackPanel
4049+
Margin="0,8,0,0"
4050+
VerticalAlignment="Center"
4051+
Orientation="Horizontal">
40324052
<TextBlock
40334053
MinWidth="220"
40344054
VerticalAlignment="Center"
40354055
Text="ShowButtonSpinner=False" />
40364056
<vio:ButtonSpinner Width="200" ShowButtonSpinner="False">
4037-
<TextBlock Text="No buttons" VerticalAlignment="Center" />
4057+
<TextBlock VerticalAlignment="Center" Text="No buttons" />
40384058
</vio:ButtonSpinner>
40394059
</StackPanel>
40404060

40414061
<!-- Split variant, buttons right -->
4042-
<StackPanel Margin="0,8,0,0" Orientation="Horizontal" VerticalAlignment="Center">
4062+
<StackPanel
4063+
Margin="0,8,0,0"
4064+
VerticalAlignment="Center"
4065+
Orientation="Horizontal">
40434066
<TextBlock
40444067
MinWidth="220"
40454068
VerticalAlignment="Center"
40464069
Text="SplitButtonSpinnerStyle" />
4047-
<vio:ButtonSpinner Width="200" Style="{DynamicResource SplitButtonSpinnerStyle}" Spin="ButtonSpinnerDemo_OnSpin">
4048-
<TextBlock x:Name="ButtonSpinnerSplitRightValueText" Text="Value: 0" VerticalAlignment="Center" />
4070+
<vio:ButtonSpinner
4071+
Width="200"
4072+
Spin="ButtonSpinnerDemo_OnSpin"
4073+
Style="{DynamicResource SplitButtonSpinnerStyle}">
4074+
<TextBlock
4075+
x:Name="ButtonSpinnerSplitRightValueText"
4076+
VerticalAlignment="Center"
4077+
Text="Apple" />
40494078
</vio:ButtonSpinner>
40504079
</StackPanel>
40514080

40524081
<!-- Split variant, buttons left -->
4053-
<StackPanel Margin="0,8,0,0" Orientation="Horizontal" VerticalAlignment="Center">
4082+
<StackPanel
4083+
Margin="0,8,0,0"
4084+
VerticalAlignment="Center"
4085+
Orientation="Horizontal">
40544086
<TextBlock
40554087
MinWidth="220"
40564088
VerticalAlignment="Center"
40574089
Text="SplitButtonSpinner, Location=Left" />
40584090
<vio:ButtonSpinner
40594091
Width="200"
40604092
ButtonSpinnerLocation="Left"
4061-
Style="{DynamicResource SplitButtonSpinnerStyle}"
4062-
Spin="ButtonSpinnerDemo_OnSpin">
4063-
<TextBlock x:Name="ButtonSpinnerSplitLeftValueText" Text="Value: 0" VerticalAlignment="Center" />
4093+
Spin="ButtonSpinnerDemo_OnSpin"
4094+
Style="{DynamicResource SplitButtonSpinnerStyle}">
4095+
<TextBlock
4096+
x:Name="ButtonSpinnerSplitLeftValueText"
4097+
VerticalAlignment="Center"
4098+
Text="Apple" />
40644099
</vio:ButtonSpinner>
40654100
</StackPanel>
40664101

40674102
<!-- Disabled -->
4068-
<StackPanel Margin="0,8,0,0" Orientation="Horizontal" VerticalAlignment="Center">
4103+
<StackPanel
4104+
Margin="0,8,0,0"
4105+
VerticalAlignment="Center"
4106+
Orientation="Horizontal">
40694107
<TextBlock
40704108
MinWidth="220"
40714109
VerticalAlignment="Center"
40724110
Text="Disabled" />
40734111
<vio:ButtonSpinner Width="200" IsEnabled="False">
4074-
<TextBlock Text="Disabled" VerticalAlignment="Center" />
4112+
<TextBlock VerticalAlignment="Center" Text="Disabled" />
40754113
</vio:ButtonSpinner>
40764114
</StackPanel>
40774115

src/Wpf.Ui.Test/MainWindow.xaml.cs

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,15 @@ namespace Wpf.Ui.Test;
2626
[ObservableObject]
2727
public partial class MainWindow : ShellWindow
2828
{
29+
private static readonly string[] _buttonSpinnerWords =
30+
[
31+
"Apple",
32+
"Banana",
33+
"Cherry",
34+
"Durian",
35+
"Elderberry",
36+
];
37+
2938
private int _buttonSpinnerDefaultValue;
3039
private int _buttonSpinnerLeftValue;
3140
private int _buttonSpinnerSplitRightValue;
@@ -68,32 +77,37 @@ private void ButtonSpinnerDemo_OnSpin(object sender, SpinEventArgs e)
6877

6978
if (ReferenceEquals(spinner.Content, ButtonSpinnerDefaultValueText))
7079
{
71-
_buttonSpinnerDefaultValue += delta;
72-
ButtonSpinnerDefaultValueText.Text = $"Value: {_buttonSpinnerDefaultValue}";
80+
_buttonSpinnerDefaultValue = WrapIndex(_buttonSpinnerDefaultValue + delta, _buttonSpinnerWords.Length);
81+
ButtonSpinnerDefaultValueText.Text = _buttonSpinnerWords[_buttonSpinnerDefaultValue];
7382
return;
7483
}
7584

7685
if (ReferenceEquals(spinner.Content, ButtonSpinnerLeftValueText))
7786
{
78-
_buttonSpinnerLeftValue += delta;
79-
ButtonSpinnerLeftValueText.Text = $"Value: {_buttonSpinnerLeftValue}";
87+
_buttonSpinnerLeftValue = WrapIndex(_buttonSpinnerLeftValue + delta, _buttonSpinnerWords.Length);
88+
ButtonSpinnerLeftValueText.Text = _buttonSpinnerWords[_buttonSpinnerLeftValue];
8089
return;
8190
}
8291

8392
if (ReferenceEquals(spinner.Content, ButtonSpinnerSplitRightValueText))
8493
{
85-
_buttonSpinnerSplitRightValue += delta;
86-
ButtonSpinnerSplitRightValueText.Text = $"Value: {_buttonSpinnerSplitRightValue}";
94+
_buttonSpinnerSplitRightValue = WrapIndex(_buttonSpinnerSplitRightValue + delta, _buttonSpinnerWords.Length);
95+
ButtonSpinnerSplitRightValueText.Text = _buttonSpinnerWords[_buttonSpinnerSplitRightValue];
8796
return;
8897
}
8998

9099
if (ReferenceEquals(spinner.Content, ButtonSpinnerSplitLeftValueText))
91100
{
92-
_buttonSpinnerSplitLeftValue += delta;
93-
ButtonSpinnerSplitLeftValueText.Text = $"Value: {_buttonSpinnerSplitLeftValue}";
101+
_buttonSpinnerSplitLeftValue = WrapIndex(_buttonSpinnerSplitLeftValue + delta, _buttonSpinnerWords.Length);
102+
ButtonSpinnerSplitLeftValueText.Text = _buttonSpinnerWords[_buttonSpinnerSplitLeftValue];
94103
}
95104
}
96105

106+
private static int WrapIndex(int value, int length)
107+
{
108+
return (value % length + length) % length;
109+
}
110+
97111
private void InitMultiComboBoxDemo()
98112
{
99113
MultiComboBoxDemo.ItemsSource = new[] { "Apple", "Banana", "Cherry", "Durian", "Elderberry" };

src/Wpf.Ui.Violeta/Controls/ButtonSpinner/ButtonSpinner.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ static ButtonSpinner()
3939
new FrameworkPropertyMetadata(typeof(ButtonSpinner)));
4040
}
4141

42-
// ─── ShowButtonSpinner ────────────────────────────────────────────────────
42+
// --- ShowButtonSpinner ----------------------------------------------------
4343

4444
public static readonly DependencyProperty ShowButtonSpinnerProperty =
4545
DependencyProperty.Register(
@@ -55,7 +55,7 @@ public bool ShowButtonSpinner
5555
set => SetValue(ShowButtonSpinnerProperty, value);
5656
}
5757

58-
// ─── AllowSpin ────────────────────────────────────────────────────────────
58+
// --- AllowSpin ------------------------------------------------------------
5959

6060
public static readonly DependencyProperty AllowSpinProperty =
6161
DependencyProperty.Register(
@@ -71,7 +71,7 @@ public bool AllowSpin
7171
set => SetValue(AllowSpinProperty, value);
7272
}
7373

74-
// ─── ButtonSpinnerLocation ────────────────────────────────────────────────
74+
// --- ButtonSpinnerLocation ------------------------------------------------
7575

7676
public static readonly DependencyProperty ButtonSpinnerLocationProperty =
7777
DependencyProperty.Register(
@@ -87,7 +87,7 @@ public ButtonSpinnerLocation ButtonSpinnerLocation
8787
set => SetValue(ButtonSpinnerLocationProperty, value);
8888
}
8989

90-
// ─── Spin routed event ────────────────────────────────────────────────────
90+
// --- Spin routed event ----------------------------------------------------
9191

9292
public static readonly RoutedEvent SpinEvent =
9393
EventManager.RegisterRoutedEvent(
@@ -103,7 +103,7 @@ public event EventHandler<SpinEventArgs> Spin
103103
remove => RemoveHandler(SpinEvent, value);
104104
}
105105

106-
// ─── Template ─────────────────────────────────────────────────────────────
106+
// --- Template -------------------------------------------------------------
107107

108108
public override void OnApplyTemplate()
109109
{

src/Wpf.Ui.Violeta/Controls/ButtonSpinner/ButtonSpinner.xaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
<Setter Property="Background" Value="Transparent" />
1818
<Setter Property="BorderBrush" Value="Transparent" />
1919
<Setter Property="BorderThickness" Value="0" />
20+
<Setter Property="Border.CornerRadius" Value="{DynamicResource ControlCornerRadius}" />
2021
<Setter Property="Foreground" Value="{DynamicResource TextFillColorSecondaryBrush}" />
2122
<Setter Property="Width" Value="{StaticResource ButtonSpinnerButtonWidth}" />
2223
<Setter Property="Padding" Value="0" />
@@ -58,6 +59,7 @@
5859
<Setter Property="Background" Value="{DynamicResource SubtleFillColorSecondaryBrush}" />
5960
<Setter Property="BorderBrush" Value="{DynamicResource TextControlElevationBorderBrush}" />
6061
<Setter Property="BorderThickness" Value="1" />
62+
<Setter Property="Border.CornerRadius" Value="{DynamicResource ControlCornerRadius}" />
6163
<Setter Property="Foreground" Value="{DynamicResource TextFillColorSecondaryBrush}" />
6264
<Setter Property="Width" Value="{StaticResource ButtonSpinnerSplitButtonSize}" />
6365
<Setter Property="Padding" Value="0" />
@@ -138,7 +140,7 @@
138140
x:Name="PART_ButtonGroup"
139141
Grid.Column="2"
140142
VerticalAlignment="Center">
141-
<StackPanel Orientation="Vertical" VerticalAlignment="Center">
143+
<StackPanel VerticalAlignment="Center" Orientation="Vertical">
142144
<RepeatButton
143145
x:Name="PART_IncreaseButton"
144146
Height="{StaticResource ButtonSpinnerButtonHeight}"

0 commit comments

Comments
 (0)