116 lines
3.7 KiB
C#
116 lines
3.7 KiB
C#
|
|
using System;
|
||
|
|
using System.Threading.Tasks;
|
||
|
|
using System.Windows;
|
||
|
|
using System.Windows.Controls;
|
||
|
|
using System.Windows.Media;
|
||
|
|
using System.Windows.Media.Animation;
|
||
|
|
|
||
|
|
namespace Ink_Canvas.Controls
|
||
|
|
{
|
||
|
|
public partial class CopyButton : UserControl
|
||
|
|
{
|
||
|
|
public static readonly DependencyProperty TextProperty = DependencyProperty.Register(
|
||
|
|
nameof(Text), typeof(string), typeof(CopyButton), new PropertyMetadata(string.Empty));
|
||
|
|
|
||
|
|
public string Text
|
||
|
|
{
|
||
|
|
get => (string)GetValue(TextProperty);
|
||
|
|
set => SetValue(TextProperty, value);
|
||
|
|
}
|
||
|
|
|
||
|
|
public event EventHandler Click;
|
||
|
|
|
||
|
|
public CopyButton()
|
||
|
|
{
|
||
|
|
InitializeComponent();
|
||
|
|
}
|
||
|
|
|
||
|
|
private void CopyButton_Click(object sender, RoutedEventArgs e)
|
||
|
|
{
|
||
|
|
try
|
||
|
|
{
|
||
|
|
if (!string.IsNullOrEmpty(Text))
|
||
|
|
{
|
||
|
|
Clipboard.SetText(Text);
|
||
|
|
}
|
||
|
|
|
||
|
|
ShowSuccessAnimation();
|
||
|
|
Click?.Invoke(this, EventArgs.Empty);
|
||
|
|
}
|
||
|
|
catch (Exception ex)
|
||
|
|
{
|
||
|
|
MessageBox.Show(ex.ToString(), "Unable to Perform Copy", MessageBoxButton.OK, MessageBoxImage.Error);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private async void ShowSuccessAnimation()
|
||
|
|
{
|
||
|
|
var copyScaleAnim = new DoubleAnimation
|
||
|
|
{
|
||
|
|
To = 0,
|
||
|
|
Duration = TimeSpan.FromMilliseconds(150)
|
||
|
|
};
|
||
|
|
ScaleTransform_Copy.BeginAnimation(ScaleTransform.ScaleXProperty, copyScaleAnim);
|
||
|
|
|
||
|
|
var copyOpacityAnim = new DoubleAnimation
|
||
|
|
{
|
||
|
|
To = 0,
|
||
|
|
BeginTime = TimeSpan.FromMilliseconds(100),
|
||
|
|
Duration = TimeSpan.FromMilliseconds(10)
|
||
|
|
};
|
||
|
|
FontIcon_Copy.BeginAnimation(UIElement.OpacityProperty, copyOpacityAnim);
|
||
|
|
|
||
|
|
await Task.Delay(150);
|
||
|
|
var successScaleAnim = new DoubleAnimation
|
||
|
|
{
|
||
|
|
To = 1,
|
||
|
|
Duration = TimeSpan.FromMilliseconds(150),
|
||
|
|
EasingFunction = new BackEase { EasingMode = EasingMode.EaseOut, Amplitude = 0.2 }
|
||
|
|
};
|
||
|
|
ScaleTransform_Success.BeginAnimation(ScaleTransform.ScaleXProperty, successScaleAnim);
|
||
|
|
|
||
|
|
var successOpacityAnim = new DoubleAnimation
|
||
|
|
{
|
||
|
|
To = 1,
|
||
|
|
Duration = TimeSpan.FromMilliseconds(15)
|
||
|
|
};
|
||
|
|
FontIcon_Success.BeginAnimation(UIElement.OpacityProperty, successOpacityAnim);
|
||
|
|
|
||
|
|
await Task.Delay(1000);
|
||
|
|
ShowCopyAnimation();
|
||
|
|
}
|
||
|
|
|
||
|
|
private async void ShowCopyAnimation()
|
||
|
|
{
|
||
|
|
var successOpacityAnim = new DoubleAnimation
|
||
|
|
{
|
||
|
|
To = 0,
|
||
|
|
Duration = TimeSpan.FromMilliseconds(150)
|
||
|
|
};
|
||
|
|
FontIcon_Success.BeginAnimation(UIElement.OpacityProperty, successOpacityAnim);
|
||
|
|
|
||
|
|
await Task.Delay(150);
|
||
|
|
var copyScaleAnim = new DoubleAnimation
|
||
|
|
{
|
||
|
|
To = 1,
|
||
|
|
Duration = TimeSpan.Zero
|
||
|
|
};
|
||
|
|
ScaleTransform_Copy.BeginAnimation(ScaleTransform.ScaleXProperty, copyScaleAnim);
|
||
|
|
|
||
|
|
var copyOpacityAnim = new DoubleAnimation
|
||
|
|
{
|
||
|
|
To = 1,
|
||
|
|
Duration = TimeSpan.FromMilliseconds(150)
|
||
|
|
};
|
||
|
|
FontIcon_Copy.BeginAnimation(UIElement.OpacityProperty, copyOpacityAnim);
|
||
|
|
|
||
|
|
var successScaleAnim = new DoubleAnimation
|
||
|
|
{
|
||
|
|
To = 0,
|
||
|
|
Duration = TimeSpan.Zero
|
||
|
|
};
|
||
|
|
ScaleTransform_Success.BeginAnimation(ScaleTransform.ScaleXProperty, successScaleAnim);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|