借助网络配置,控制Modbus工具的日志显示,避免卡死界面
智能大石头 authored at 2021-12-11 22:09:19
1.80 KiB
XCoder
using System.IO;
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Interactivity;
using XCoderAv.ViewModels;
using XCoderMac.Dialogs;

namespace XCoderMac.Views;

/// <summary>复用正则处理 ViewModel 的 macOS 风格窗口。</summary>
public partial class MacRegexWindow : Window
{
    private RegexViewModel ViewModel => (RegexViewModel)DataContext!;

    public MacRegexWindow()
    {
        InitializeComponent();
        DataContext = new RegexViewModel();
        // 隧道阶段先于多行文本框收到回车;普通回车为 Key.Return,数字键盘为 Key.Enter。
        AddHandler(InputElement.KeyDownEvent, Window_KeyDown, RoutingStrategies.Tunnel, handledEventsToo: true);
    }

    private async void BatchReplace_Click(object? sender, RoutedEventArgs e)
    {
        if (!Directory.Exists(ViewModel.DirectoryPath))
        {
            ViewModel.Status = "请先选择有效的批量替换目录";
            return;
        }

        var ok = await ConfirmDialog.ShowAsync((TopLevel.GetTopLevel(sender as Control) as Window) ?? this, "确认批量替换文件?",
            $"将在目录 {ViewModel.DirectoryPath} 及其子目录中,按照文件过滤器“{ViewModel.FileFilter}”直接覆盖匹配的文件(原工具最多处理 1000 个文件)。请先备份相关文件。",
            "确认替换");
        if (ok && ViewModel.BatchReplaceCommand.CanExecute(null))
            ViewModel.BatchReplaceCommand.Execute(null);
    }

    private void Window_KeyDown(object? sender, KeyEventArgs e)
    {
        if ((e.Key == Key.Return || e.Key == Key.Enter) && e.KeyModifiers.HasFlag(KeyModifiers.Meta))
        {
            if (ViewModel.ExecuteCommand.CanExecute(null))
                ViewModel.ExecuteCommand.Execute(null);
            e.Handled = true;
        }
    }
}