更新项目配置,新增设备同步模块,优化WebSocket和Swagger配置,增强SCADA系统的免登录接口,支持数据字典项和登录日志的免登录查询与记录。调整Java编译设置,确保更好的开发体验。
This commit is contained in:
80
yy-admin-master/YY.Admin.Core/Helper/ScrollViewerHelper.cs
Normal file
80
yy-admin-master/YY.Admin.Core/Helper/ScrollViewerHelper.cs
Normal file
@@ -0,0 +1,80 @@
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Input;
|
||||
using PropertyMetadata = System.Windows.PropertyMetadata;
|
||||
|
||||
namespace YY.Admin.Core.Helper
|
||||
{
|
||||
/// <summary>
|
||||
/// ScrollViewer 辅助类:
|
||||
/// 解决 ScrollViewer 包裹 TreeView / ListBox 等控件时,
|
||||
/// 鼠标滚轮在内部控件上无法触发外层 ScrollViewer 滚动的问题。
|
||||
/// </summary>
|
||||
public static class ScrollViewerHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// 附加属性:是否启用鼠标滚轮事件向上传递
|
||||
/// </summary>
|
||||
public static readonly DependencyProperty EnableMouseWheelPropagationProperty =
|
||||
DependencyProperty.RegisterAttached(
|
||||
"EnableMouseWheelPropagation", // 属性名
|
||||
typeof(bool), // 属性类型
|
||||
typeof(ScrollViewerHelper), // 所属类型
|
||||
new PropertyMetadata(false, OnEnableMouseWheelPropagationChanged)); // 默认值+回调
|
||||
|
||||
/// <summary>
|
||||
/// 获取附加属性值(XAML 绑定/读取)
|
||||
/// </summary>
|
||||
public static bool GetEnableMouseWheelPropagation(DependencyObject obj)
|
||||
=> (bool)obj.GetValue(EnableMouseWheelPropagationProperty);
|
||||
|
||||
/// <summary>
|
||||
/// 设置附加属性值(XAML 设置)
|
||||
/// </summary>
|
||||
public static void SetEnableMouseWheelPropagation(DependencyObject obj, bool value)
|
||||
=> obj.SetValue(EnableMouseWheelPropagationProperty, value);
|
||||
|
||||
/// <summary>
|
||||
/// 当附加属性值发生变化时触发
|
||||
/// </summary>
|
||||
private static void OnEnableMouseWheelPropagationChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
||||
{
|
||||
if (d is UIElement element)
|
||||
{
|
||||
// 如果启用,则订阅 PreviewMouseWheel 事件
|
||||
if ((bool)e.NewValue)
|
||||
element.PreviewMouseWheel += Element_PreviewMouseWheel;
|
||||
else
|
||||
// 否则移除事件
|
||||
element.PreviewMouseWheel -= Element_PreviewMouseWheel;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 当鼠标滚轮在目标控件上滚动时触发,
|
||||
/// 将事件手动冒泡到上层(如 ScrollViewer)以实现滚动。
|
||||
/// </summary>
|
||||
private static void Element_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
|
||||
{
|
||||
// 若事件已被处理,则直接返回
|
||||
if (e.Handled) return;
|
||||
|
||||
// 标记事件已处理,防止重复触发
|
||||
e.Handled = true;
|
||||
|
||||
// 构造一个新的 MouseWheelEventArgs,用于向父级转发
|
||||
var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta)
|
||||
{
|
||||
RoutedEvent = UIElement.MouseWheelEvent, // 指定为标准鼠标滚轮事件
|
||||
Source = sender // 来源设为当前控件
|
||||
};
|
||||
|
||||
// 获取父元素,并将事件重新抛出
|
||||
if (sender is Control control)
|
||||
{
|
||||
var parent = control.Parent as UIElement;
|
||||
parent?.RaiseEvent(eventArg);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
29
yy-admin-master/YY.Admin.Core/Helper/SystemHelper.cs
Normal file
29
yy-admin-master/YY.Admin.Core/Helper/SystemHelper.cs
Normal file
@@ -0,0 +1,29 @@
|
||||
using HandyControl.Data;
|
||||
using Microsoft.Win32;
|
||||
using System.Runtime.InteropServices;
|
||||
using YY.Admin.Tools.Interop;
|
||||
|
||||
namespace YY.Admin.Core.Helper
|
||||
{
|
||||
public class SystemHelper
|
||||
{
|
||||
public static SystemVersionInfo GetSystemVersionInfo()
|
||||
{
|
||||
var osv = new InteropValues.RTL_OSVERSIONINFOEX();
|
||||
osv.dwOSVersionInfoSize = (uint)Marshal.SizeOf(osv);
|
||||
InteropMethods.Gdip.RtlGetVersion(out osv);
|
||||
return new SystemVersionInfo((int)osv.dwMajorVersion, (int)osv.dwMinorVersion, (int)osv.dwBuildNumber);
|
||||
}
|
||||
|
||||
private const string SkinTypeRegistryKeyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize";
|
||||
|
||||
private const string SkinTypeRegistryValueName = "AppsUseLightTheme";
|
||||
|
||||
public static bool DetermineIfInLightThemeMode()
|
||||
{
|
||||
var value = Registry.GetValue(SkinTypeRegistryKeyName, SkinTypeRegistryValueName, "0");
|
||||
|
||||
return value != null && value.ToString() != "0";
|
||||
}
|
||||
}
|
||||
}
|
||||
31
yy-admin-master/YY.Admin.Core/Helper/UIHelper.cs
Normal file
31
yy-admin-master/YY.Admin.Core/Helper/UIHelper.cs
Normal file
@@ -0,0 +1,31 @@
|
||||
using System.Windows.Media;
|
||||
|
||||
namespace YY.Admin.Core.Helper
|
||||
{
|
||||
public static class UIHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// 等待 WPF 完成下一次渲染帧,确保 UI 更新已经完成
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static async Task WaitForRenderAsync()
|
||||
{
|
||||
var tcs = new TaskCompletionSource<object?>();
|
||||
|
||||
EventHandler handler = null!;
|
||||
handler = (s, e) =>
|
||||
{
|
||||
// 取消订阅
|
||||
CompositionTarget.Rendering -= handler;
|
||||
// 标记任务完成
|
||||
tcs.TrySetResult(null);
|
||||
};
|
||||
|
||||
// 订阅渲染事件
|
||||
CompositionTarget.Rendering += handler;
|
||||
|
||||
// 等待下一次渲染
|
||||
await tcs.Task;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user