diff --git a/src/Shared/HandyControl_Shared/Controls/Other/Sprite.cs b/src/Shared/HandyControl_Shared/Controls/Other/Sprite.cs index fb7340e5..0d1bea88 100644 --- a/src/Shared/HandyControl_Shared/Controls/Other/Sprite.cs +++ b/src/Shared/HandyControl_Shared/Controls/Other/Sprite.cs @@ -1,7 +1,64 @@ -namespace HandyControl.Controls +using System.Windows; +using System.Windows.Input; + +namespace HandyControl.Controls { - public class Sprite : System.Windows.Window + public sealed class Sprite : System.Windows.Window { - + private bool _isLeftButtonPressed; + + private double _leftMax; + + private double _topMax; + + private Sprite() + { + WindowStyle = WindowStyle.None; + AllowsTransparency = true; + InputManager.Current.PostProcessInput += Current_PostProcessInput; + } + + private void Current_PostProcessInput(object sender, ProcessInputEventArgs e) + { + if (Mouse.LeftButton == MouseButtonState.Pressed) + { + _isLeftButtonPressed = true; + } + else if(_isLeftButtonPressed) + { + if (Left < 0) + { + Left = 0; + } + + if (Left > _leftMax) + { + Left = _leftMax; + } + + if (Top > _topMax) + { + Top = _topMax; + } + } + } + + public static Sprite Show(object content) + { + var sprite = new Sprite + { + Content = content + }; + + sprite.Show(); + + var desktopWorkingArea = SystemParameters.WorkArea; + sprite._leftMax = desktopWorkingArea.Width - sprite.ActualWidth; + sprite._topMax = desktopWorkingArea.Height - sprite.ActualHeight; + sprite.Left = sprite._leftMax - 50; + sprite.Top = 50 - sprite.Padding.Top; + + return sprite; + } } } \ No newline at end of file diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Sprite.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Sprite.xaml new file mode 100644 index 00000000..420b4883 --- /dev/null +++ b/src/Shared/HandyControl_Shared/Themes/Styles/Sprite.xaml @@ -0,0 +1,22 @@ + + + + + \ No newline at end of file