completed the branch
This commit is contained in:
1 parent
a8aa1a4525
commit
f37e9f78b8
4 files changed
+82
-11
No files matched your search
@@ -38,4 +38,9 @@
|
||||
<ItemGroup>
|
||||
<None Remove="Themes\Styles\Base\TreeViewBaseStyle.xaml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="..\..\Shared\HandyControl_Shared\Resources\dropper.cur">
|
||||
<Link>Resources\dropper.cur</Link>
|
||||
</Resource>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -100,6 +100,11 @@
|
||||
<LastGenOutput>Lang.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="..\..\Shared\HandyControl_Shared\Resources\dropper.cur">
|
||||
<Link>Resources\dropper.cur</Link>
|
||||
</Resource>
|
||||
</ItemGroup>
|
||||
<Import Project="..\..\Shared\HandyControl_Shared\HandyControl_Shared.projitems" Label="Shared" />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
@@ -1,6 +1,5 @@
|
||||
using System;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
using HandyControl.Data;
|
||||
@@ -9,8 +8,10 @@ using HandyControl.Tools.Interop;
|
||||
|
||||
namespace HandyControl.Controls
|
||||
{
|
||||
internal class ColorDropper : Control
|
||||
internal class ColorDropper
|
||||
{
|
||||
private bool _cursorIsSetted;
|
||||
|
||||
private Cursor _dropperCursor;
|
||||
|
||||
private readonly ColorPicker _colorPicker;
|
||||
@@ -26,8 +27,7 @@ namespace HandyControl.Controls
|
||||
{
|
||||
if (_dropperCursor == null)
|
||||
{
|
||||
var info = Application.GetResourceStream(
|
||||
new Uri("pack://application:,,,/HandyControl;Component/Resources/dropper.cur"));
|
||||
var info = Application.GetResourceStream(new Uri("pack://application:,,,/HandyControl;Component/Resources/dropper.cur"));
|
||||
if (info != null)
|
||||
{
|
||||
_dropperCursor = new Cursor(info.Stream);
|
||||
@@ -36,24 +36,61 @@ namespace HandyControl.Controls
|
||||
|
||||
if (_dropperCursor == null) return;
|
||||
|
||||
Mouse.OverrideCursor = _dropperCursor;
|
||||
MouseHook.Start();
|
||||
MouseHook.StatusChanged += MouseHook_StatusChanged;
|
||||
}
|
||||
else
|
||||
{
|
||||
Mouse.OverrideCursor = Cursors.Arrow;
|
||||
MouseHook.Stop();
|
||||
MouseHook.StatusChanged -= MouseHook_StatusChanged;
|
||||
}
|
||||
}
|
||||
|
||||
private void MouseHook_StatusChanged(object sender, MouseHookEventArgs e)
|
||||
{
|
||||
if (!_colorPicker.IsMouseOver && e.Message == MouseHookMessageType.LeftButtonDown)
|
||||
var window = System.Windows.Window.GetWindow(_colorPicker);
|
||||
if (window == null)
|
||||
{
|
||||
var brush = new SolidColorBrush(GetColorAt(e.Point.X, e.Point.Y));
|
||||
_colorPicker.SelectedBrush = brush;
|
||||
//MouseHook.Stop();
|
||||
//MouseHook.StatusChanged -= MouseHook_StatusChanged;
|
||||
UpdateCursor(false);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_colorPicker.IsMouseOver && window.IsMouseOver)
|
||||
{
|
||||
UpdateCursor(true);
|
||||
if (e.Message == MouseHookMessageType.LeftButtonDown)
|
||||
{
|
||||
var brush = new SolidColorBrush(GetColorAt(e.Point.X, e.Point.Y));
|
||||
_colorPicker.SelectedBrush = brush;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
UpdateCursor(false);
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateCursor(bool isDropper)
|
||||
{
|
||||
if (isDropper)
|
||||
{
|
||||
Mouse.Captured?.ReleaseMouseCapture();
|
||||
|
||||
if (!_cursorIsSetted)
|
||||
{
|
||||
Mouse.OverrideCursor = _dropperCursor;
|
||||
_cursorIsSetted = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_cursorIsSetted)
|
||||
{
|
||||
Mouse.OverrideCursor = Cursors.Arrow;
|
||||
_cursorIsSetted = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -61,6 +61,8 @@ namespace HandyControl.Controls
|
||||
|
||||
private bool _appliedTemplate;
|
||||
|
||||
private bool _disposed;
|
||||
|
||||
/// <summary>
|
||||
/// 当前显示的颜色类型
|
||||
/// </summary>
|
||||
@@ -340,6 +342,11 @@ namespace HandyControl.Controls
|
||||
}
|
||||
}
|
||||
|
||||
~ColorPicker()
|
||||
{
|
||||
Dispose(false);
|
||||
}
|
||||
|
||||
public ColorPicker()
|
||||
{
|
||||
CommandBindings.Add(new CommandBinding(ControlCommands.Confirm, ButtonConfirm_OnClick));
|
||||
@@ -704,8 +711,25 @@ namespace HandyControl.Controls
|
||||
_colorDropper.Update(_toggleButtonDropper.IsChecked.Value);
|
||||
}
|
||||
|
||||
public void Dispose() => System.Windows.Window.GetWindow(this)?.Close();
|
||||
protected virtual void Dispose(bool disposing)
|
||||
{
|
||||
if (_disposed) return;
|
||||
|
||||
Dispatcher.BeginInvoke(new Action(() =>
|
||||
{
|
||||
_colorDropper?.Update(false);
|
||||
System.Windows.Window.GetWindow(this)?.Close();
|
||||
}));
|
||||
_disposed = true;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Dispose(true);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
public bool CanDispose { get; } = true;
|
||||
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user