Files
ShrlAlgoToolkit/Sai.Toolkit.Core/Heplers/WinDialogHelper.cs
2024-09-22 11:05:41 +08:00

123 lines
3.0 KiB
C#

using System.IO;
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 "所有文件(*)|*";
}
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}";
}
/// <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 };
// var folderPath = dialog.ShowDialog() == true ? dialog.SelectedPath : null;
// return folderPath;
//}
///// <summary>
///// 多选文件夹路径
///// </summary>
///// <returns></returns>
//public static string[] GetSelectedFolderPaths()
//{
// var dialog = new Ookii.Dialogs.Wpf.VistaFolderBrowserDialog { Multiselect = true };
// 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();
}
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<T>.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();
//}
}
}