Skip to content

Commit 2c0875e

Browse files
committed
feat: Add Dialog styles and demo.
1 parent cb7e6fb commit 2c0875e

20 files changed

Lines changed: 695 additions & 2 deletions

src/Avalonia/HandyControlDemo_Avalonia/Data/DemoInfo.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
"group": true,
4343
"demoItemList": [
4444
[ "ConfettiCannon", "ConfettiCannonDemo", "Brush.Favorite", "", "Interacting" ],
45+
[ "Dialog", "DialogDemo", "Brush.Dialog", "", "Feedback" ],
4546
[ "Gravatar", "GravatarDemo", "Brush.User", "", "DataDisplay" ],
4647
[ "ButtonGroup", "ButtonGroupDemo", "Brush.ButtonGroup", "", "Button" ],
4748
[ "ProgressButton", "ProgressButtonDemo", "Brush.ProgressBarStatusBar8", "", "Button" ],

src/Avalonia/HandyControlDemo_Avalonia/MainWindow.axaml.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
11
using Avalonia.Controls;
22
using Avalonia.Interactivity;
3+
using HandyControl.Controls;
4+
using HandyControlDemo.Data;
35
using HandyControlDemo.UserControl;
46
using HandyControlDemo.ViewModel;
57

68
namespace HandyControlDemo;
79

8-
public partial class MainWindow : Window
10+
public partial class MainWindow : Avalonia.Controls.Window
911
{
10-
public MainWindow() => InitializeComponent();
12+
public MainWindow()
13+
{
14+
InitializeComponent();
15+
16+
Dialog.SetToken(this, MessageToken.MainWindow);
17+
}
1118

1219
protected override void OnLoaded(RoutedEventArgs e)
1320
{
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<Border x:Class="HandyControlDemo.UserControl.InteractiveDialog"
2+
xmlns="https://github.com/avaloniaui"
3+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4+
xmlns:hc="https://handyorg.github.io/handycontrol"
5+
CornerRadius="10"
6+
Width="400"
7+
Height="247"
8+
Background="{DynamicResource RegionBrush}">
9+
<StackPanel VerticalAlignment="Center"
10+
Margin="32"
11+
Spacing="32">
12+
<TextBlock Theme="{StaticResource TextBlockLargeBold}"
13+
Text="{Binding Message}" />
14+
<TextBox Text="{Binding Result, Mode=TwoWay}"
15+
Theme="{StaticResource TextBoxExtend}" />
16+
<Button Width="120"
17+
Command="{Binding CloseCommand}"
18+
Theme="{StaticResource ButtonPrimary}"
19+
HorizontalAlignment="Center"
20+
Content="OK" />
21+
</StackPanel>
22+
</Border>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using Avalonia.Controls;
2+
using HandyControlDemo.ViewModel;
3+
4+
namespace HandyControlDemo.UserControl;
5+
6+
public partial class InteractiveDialog : Border
7+
{
8+
public InteractiveDialog()
9+
{
10+
InitializeComponent();
11+
12+
DataContext = new InteractiveDialogViewModel();
13+
}
14+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<Border x:Class="HandyControlDemo.UserControl.TextDialog"
2+
xmlns="https://github.com/avaloniaui"
3+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4+
xmlns:hc="https://handyorg.github.io/handycontrol"
5+
CornerRadius="10"
6+
Width="400"
7+
Height="247"
8+
Background="{DynamicResource RegionBrush}">
9+
<Panel>
10+
<TextBlock Theme="{StaticResource TextBlockLargeBold}"
11+
HorizontalAlignment="Center"
12+
VerticalAlignment="Center"
13+
Text="Please wait..." />
14+
<Button x:Name="CloseButton"
15+
Width="22"
16+
Height="22"
17+
Theme="{StaticResource ButtonIcon}"
18+
Foreground="{DynamicResource PrimaryBrush}"
19+
hc:IconElement.Geometry="{StaticResource ErrorGeometry}"
20+
Padding="0"
21+
HorizontalAlignment="Right"
22+
VerticalAlignment="Top"
23+
Margin="0,4,4,0" />
24+
</Panel>
25+
</Border>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using Avalonia.Controls;
2+
using Avalonia.VisualTree;
3+
using HandyControl.Controls;
4+
5+
namespace HandyControlDemo.UserControl;
6+
7+
public partial class TextDialog : Border
8+
{
9+
public TextDialog()
10+
{
11+
InitializeComponent();
12+
13+
CloseButton.Click += (_, _) => this.FindAncestorOfType<Dialog>()?.Close();
14+
}
15+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<Border x:Class="HandyControlDemo.UserControl.TextDialogWithTimer"
2+
xmlns="https://github.com/avaloniaui"
3+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4+
xmlns:hc="https://handyorg.github.io/handycontrol"
5+
CornerRadius="10"
6+
Width="400"
7+
Height="247"
8+
Background="{DynamicResource RegionBrush}">
9+
<Panel>
10+
<Viewbox Width="80"
11+
Height="80"
12+
HorizontalAlignment="Center"
13+
VerticalAlignment="Center">
14+
<TextBlock TextWrapping="Wrap"
15+
Theme="{StaticResource TextBlockLargeBold}"
16+
Text="Please wait..." />
17+
</Viewbox>
18+
<Button x:Name="CloseButton"
19+
Width="22"
20+
Height="22"
21+
Foreground="{DynamicResource PrimaryBrush}"
22+
hc:IconElement.Geometry="{StaticResource ErrorGeometry}"
23+
Padding="0"
24+
Theme="{StaticResource ButtonIcon}"
25+
HorizontalAlignment="Right"
26+
VerticalAlignment="Top"
27+
Margin="0,4,4,0" />
28+
<hc:CircleProgressBar x:Name="ProgressBarTimer"
29+
ShowText="False"
30+
Width="120"
31+
Height="120"
32+
HorizontalAlignment="Center"
33+
VerticalAlignment="Center" />
34+
</Panel>
35+
</Border>
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
using System;
2+
using Avalonia.Controls;
3+
using Avalonia.Threading;
4+
using Avalonia.VisualTree;
5+
using HandyControl.Controls;
6+
using HandyControlDemo.ViewModel;
7+
8+
namespace HandyControlDemo.UserControl;
9+
10+
public partial class TextDialogWithTimer : Border
11+
{
12+
public TextDialogWithTimer()
13+
{
14+
InitializeComponent();
15+
16+
DataContext = new InteractiveDialogViewModel();
17+
18+
var startTime = DateTime.Now;
19+
var timer = new DispatcherTimer(DispatcherPriority.ApplicationIdle)
20+
{
21+
Interval = TimeSpan.FromMilliseconds(50)
22+
};
23+
24+
timer.Tick += (_, _) =>
25+
{
26+
var elapsed = (DateTime.Now - startTime).TotalMilliseconds;
27+
var progress = Math.Min(elapsed / 5000.0 * 100, 100);
28+
ProgressBarTimer.Value = progress;
29+
30+
if (progress >= 100)
31+
{
32+
timer.Stop();
33+
this.FindAncestorOfType<Dialog>()?.Close();
34+
}
35+
};
36+
timer.Start();
37+
38+
CloseButton.Click += (_, _) =>
39+
{
40+
timer.Stop();
41+
this.FindAncestorOfType<Dialog>()?.Close();
42+
};
43+
}
44+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<UserControl xmlns="https://github.com/avaloniaui"
2+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
3+
xmlns:hc="https://handyorg.github.io/handycontrol"
4+
xmlns:vm="clr-namespace:HandyControlDemo.ViewModel"
5+
xmlns:sys="clr-namespace:System;assembly=System.Runtime"
6+
x:Class="HandyControlDemo.UserControl.DialogDemo"
7+
DataContext="{Binding DialogDemo, Source={x:Static vm:ViewModelLocator.Instance}}"
8+
Background="{DynamicResource RegionBrush}"
9+
MinWidth="500">
10+
<hc:DialogContainer>
11+
<TransitioningContentControl>
12+
<Panel>
13+
<StackPanel Margin="32"
14+
VerticalAlignment="Center">
15+
<Button Content="TextDialog"
16+
Command="{Binding ShowTextCommand}" />
17+
<Button Margin="0,32,0,0"
18+
Content="TextDialog(In control)"
19+
Command="{Binding ShowTextCommand}"
20+
CommandParameter="{Binding $parent[UserControl]}" />
21+
<Button Margin="0,32,0,0"
22+
Content="TextDialog with timer"
23+
Command="{Binding ShowInteractiveDialogCommand}">
24+
<Button.CommandParameter>
25+
<sys:Boolean>True</sys:Boolean>
26+
</Button.CommandParameter>
27+
</Button>
28+
<TextBox Margin="0,32,0,0"
29+
Text="{Binding DialogResult}"
30+
Theme="{StaticResource TextBoxExtend}"
31+
Watermark="Please input..." />
32+
<Button Margin="0,10,0,0"
33+
Content="InteractiveDialog"
34+
Command="{Binding ShowInteractiveDialogCommand}">
35+
<Button.CommandParameter>
36+
<sys:Boolean>False</sys:Boolean>
37+
</Button.CommandParameter>
38+
</Button>
39+
<Button Margin="0,32,0,0"
40+
Content="New window"
41+
Command="{Binding NewWindowCommand}" />
42+
</StackPanel>
43+
</Panel>
44+
</TransitioningContentControl>
45+
</hc:DialogContainer>
46+
</UserControl>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using HandyControl.Controls;
2+
using HandyControlDemo.Data;
3+
using HandyControlDemo.ViewModel;
4+
5+
namespace HandyControlDemo.UserControl;
6+
7+
public partial class DialogDemo : Avalonia.Controls.UserControl
8+
{
9+
public DialogDemo()
10+
{
11+
InitializeComponent();
12+
13+
DataContext = ViewModelLocator.Instance.DialogDemo;
14+
Dialog.SetToken(this, MessageToken.DialogContainer);
15+
}
16+
}

0 commit comments

Comments
 (0)