增加保温层和整理管线的功能,修复自动保存功能等修复多个bug
This commit is contained in:
@@ -2,121 +2,148 @@
|
||||
using System.Reflection;
|
||||
using System.Windows;
|
||||
using System.Windows.Interop;
|
||||
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
|
||||
using Microsoft.Win32;
|
||||
|
||||
namespace Sai.Toolkit.Core.Helpers;
|
||||
|
||||
public static class WinDialogHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// 对话框过滤器
|
||||
/// </summary>
|
||||
/// <param name="filterName">过滤器的名称</param>
|
||||
/// <param name="extensions">仅扩展名,*代表所有文件</param>
|
||||
/// <returns></returns>
|
||||
public static string CreateFilter(string filterName, params string[] extensions)
|
||||
{
|
||||
if (extensions[0] == "*")
|
||||
{
|
||||
return "所有文件(*)|*";
|
||||
}
|
||||
/// <summary>
|
||||
/// 对话框过滤器
|
||||
/// </summary>
|
||||
/// <param name="filterName">过滤器的名称</param>
|
||||
/// <param name="extensions">仅扩展名,*代表所有文件</param>
|
||||
/// <returns></returns>
|
||||
public static string CreateFilter(string filterName, params string[] extensions)
|
||||
{
|
||||
if (extensions[0] == "*")
|
||||
{
|
||||
return "所有文件(*)|*";
|
||||
}
|
||||
|
||||
var str = string.Empty;
|
||||
for (var i = 0; i < extensions.Length; i++)
|
||||
{
|
||||
var extension = extensions[i];
|
||||
str += $"*.{extension}";
|
||||
if (i < extensions.Length - 1)
|
||||
{
|
||||
str += ";";
|
||||
}
|
||||
}
|
||||
var str = string.Empty;
|
||||
for (var i = 0; i < extensions.Length; i++)
|
||||
{
|
||||
var extension = extensions[i];
|
||||
str += $"*.{extension}";
|
||||
if (i < extensions.Length - 1)
|
||||
{
|
||||
str += ";";
|
||||
}
|
||||
}
|
||||
|
||||
return $"{filterName}({str})|{str}";
|
||||
}
|
||||
return $"{filterName}({str})|{str}";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 选择文件
|
||||
/// </summary>
|
||||
/// <param name="title"></param>
|
||||
/// <param name="extensions"></param>
|
||||
/// <returns></returns>
|
||||
public static string GetSelectedFilePath(string title, params string[] extensions)
|
||||
{
|
||||
OpenFileDialog dialog =
|
||||
new()
|
||||
{
|
||||
CheckFileExists = true,
|
||||
Filter = CreateFilter(title, extensions),
|
||||
InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
|
||||
};
|
||||
return dialog.ShowDialog() == true ? dialog.FileName : null;
|
||||
}
|
||||
/// <summary>
|
||||
/// 选择文件
|
||||
/// </summary>
|
||||
/// <param name="title"></param>
|
||||
/// <param name="extensions"></param>
|
||||
/// <returns></returns>
|
||||
public static string GetSelectedFilePath(string title, params string[] extensions)
|
||||
{
|
||||
OpenFileDialog dialog =
|
||||
new()
|
||||
{
|
||||
CheckFileExists = true,
|
||||
Filter = CreateFilter(title, extensions),
|
||||
InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
|
||||
};
|
||||
return dialog.ShowDialog() == true ? dialog.FileName : null;
|
||||
}
|
||||
|
||||
///// <summary>
|
||||
///// 单选文件夹路径
|
||||
///// </summary>
|
||||
///// <returns></returns>
|
||||
//public static string GetSelectedFolderPath()
|
||||
//{
|
||||
// var dialog = new Ookii.Dialogs.Wpf.VistaFolderBrowserDialog { Multiselect = false };
|
||||
///// <summary>
|
||||
///// 单选文件夹路径
|
||||
///// </summary>
|
||||
///// <returns></returns>
|
||||
//public static string GetSelectedFolderPath()
|
||||
//{
|
||||
// var dialog = new Ookii.Dialogs.Wpf.VistaFolderBrowserDialog { Multiselect = false };
|
||||
|
||||
// var folderPath = dialog.ShowDialog() == true ? dialog.SelectedPath : null;
|
||||
// var folderPath = dialog.ShowDialog() == true ? dialog.SelectedPath : null;
|
||||
|
||||
// return folderPath;
|
||||
//}
|
||||
// return folderPath;
|
||||
//}
|
||||
|
||||
///// <summary>
|
||||
///// 多选文件夹路径
|
||||
///// </summary>
|
||||
///// <returns></returns>
|
||||
//public static string[] GetSelectedFolderPaths()
|
||||
//{
|
||||
// var dialog = new Ookii.Dialogs.Wpf.VistaFolderBrowserDialog { Multiselect = true };
|
||||
///// <summary>
|
||||
///// 多选文件夹路径
|
||||
///// </summary>
|
||||
///// <returns></returns>
|
||||
//public static string[] GetSelectedFolderPaths()
|
||||
//{
|
||||
// var dialog = new Ookii.Dialogs.Wpf.VistaFolderBrowserDialog { Multiselect = true };
|
||||
|
||||
// return dialog.ShowDialog() == true ? dialog.SelectedPaths : null;
|
||||
//}
|
||||
// return dialog.ShowDialog() == true ? dialog.SelectedPaths : null;
|
||||
//}
|
||||
|
||||
/// <summary>
|
||||
/// 打开窗口,非模态窗口置顶显示,默认非模态
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private static void ShowAhead(this Window window)
|
||||
{
|
||||
_ = new WindowInteropHelper(window) { Owner = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle };
|
||||
window.Show();
|
||||
}
|
||||
/// <summary>
|
||||
/// 打开窗口,非模态窗口置顶显示,默认非模态
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private static void ShowAhead(this Window window)
|
||||
{
|
||||
_ = new WindowInteropHelper(window) { Owner = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle };
|
||||
window.Show();
|
||||
}
|
||||
|
||||
public static void ShowModeless<T>(ObservableObject viewModel)
|
||||
where T : Window, new()
|
||||
{
|
||||
var view = SingletonViewHelper<T>.GetInstance(out var isNewCreate);
|
||||
if (isNewCreate)
|
||||
{
|
||||
view.DataContext = viewModel;
|
||||
view.ShowAhead();
|
||||
}
|
||||
view.Activate();
|
||||
//AssemblyLoaderHelpers loaderUtil = new(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
|
||||
//loaderUtil.HookAssemblyResolve();
|
||||
//try
|
||||
//{
|
||||
// var view = SingletonViewHelper<Command>.GetInstance(out var isNewCreate);
|
||||
// if (isNewCreate)
|
||||
// {
|
||||
// view.DataContext = viewModel;
|
||||
// view.ShowAhead();
|
||||
// }
|
||||
// view.Activate();
|
||||
//}
|
||||
//catch (Exception ex)
|
||||
//{
|
||||
// LogHelper.ToLog($"{ex.Source}:{ex.StackTrace}");
|
||||
//}
|
||||
//finally
|
||||
//{
|
||||
// loaderUtil.UnhookAssemblyResolve();
|
||||
//}
|
||||
}
|
||||
public static void ShowModeless<T>(ObservableObject viewModel)
|
||||
where T : Window, new()
|
||||
{
|
||||
var view = SingletonViewHelper<T>.GetInstance(out var isNewCreate);
|
||||
if (isNewCreate)
|
||||
{
|
||||
view.DataContext = viewModel;
|
||||
view.ShowAhead();
|
||||
}
|
||||
view.Activate();
|
||||
//AssemblyLoaderHelpers loaderUtil = new(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
|
||||
//loaderUtil.HookAssemblyResolve();
|
||||
//try
|
||||
//{
|
||||
// var view = SingletonViewHelper<Command>.GetInstance(out var isNewCreate);
|
||||
// if (isNewCreate)
|
||||
// {
|
||||
// view.DataContext = viewModel;
|
||||
// view.ShowAhead();
|
||||
// }
|
||||
// view.Activate();
|
||||
//}
|
||||
//catch (Exception ex)
|
||||
//{
|
||||
// LogHelper.ToLog($"{ex.Source}:{ex.StackTrace}");
|
||||
//}
|
||||
//finally
|
||||
//{
|
||||
// loaderUtil.UnhookAssemblyResolve();
|
||||
//}
|
||||
}
|
||||
private static Dictionary<Type, Window> _windows = [];
|
||||
public static void ShowOrActivate<TWindow, TViewModel>(params object[] viewModelParams)
|
||||
where TWindow : Window, new()
|
||||
where TViewModel : class
|
||||
{
|
||||
var windowType = typeof(TWindow);
|
||||
if (!_windows.ContainsKey(windowType) || _windows[windowType] == null)
|
||||
{
|
||||
//CloseAllWindowsExcept(windowType);
|
||||
_windows[windowType] = new TWindow();
|
||||
_windows[windowType].Closed += (sender, args) => _windows[windowType] = null;
|
||||
if (_windows[windowType].DataContext == null || !(_windows[windowType].DataContext is TViewModel))
|
||||
{
|
||||
_windows[windowType].DataContext = viewModelParams.Length == 0
|
||||
? Activator.CreateInstance(typeof(TViewModel))
|
||||
: Activator.CreateInstance(typeof(TViewModel), viewModelParams);
|
||||
}
|
||||
_ = new WindowInteropHelper(_windows[windowType]) { Owner = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle };
|
||||
_windows[windowType].Show();
|
||||
}
|
||||
else
|
||||
{
|
||||
_windows[windowType].Activate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user