WPF+DiffPlex实现文本比对工具

作者:黑夜中的潜行者 时间:2022-04-20 21:32:07 

背景

现行的文本编辑器大多都具备文本查询的能力,但是并不能直观的告诉用户两段文字的细微差异,所以对比工具在某种情况下,就起到了很便捷的效率。

关于 DiffPlex

DiffPlex 是用于生成文本差异的 C# 库

准备

NuGet 包

DiffPlex.Wpf 主要包

MaterialDesignThemes 主题包

代码实现

MainWindow.xaml

<Window
   x:Class="TextComparisonTool.MainWindow"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
   xmlns:diffplex="clr-namespace:DiffPlex.Wpf.Controls;assembly=DiffPlex.Wpf"
   xmlns:local="clr-namespace:TextComparisonTool"
   xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
   Title="文本比对工具"
   Width="800"
   Height="450"
   Icon="DiffPlex.ico"
   WindowState="Maximized"
   mc:Ignorable="d">

<Grid Margin="5">
       <Grid.RowDefinitions>
           <RowDefinition Height="40" />
           <RowDefinition />
       </Grid.RowDefinitions>
       <WrapPanel>
           <Button
               x:Name="BtnInput"
               Click="BtnInput_Click"
               Content="输入文本"
               Style="{DynamicResource MaterialDesignFlatAccentBgButton}" />
       </WrapPanel>
       <diffplex:DiffViewer x:Name="DiffView" Grid.Row="1" />
   </Grid>

</Window>

MainWindow.xaml.cs

using System.Windows;

namespace TextComparisonTool
{
   /// <summary>
   /// Interaction logic for MainWindow.xaml
   /// </summary>
   public partial class MainWindow : Window
   {
       public MainWindow()
       {
           InitializeComponent();          
       }

private void BtnInput_Click(object sender, RoutedEventArgs e)
       {
           InputOldeTextAndNewText input = new();

input.ShowDialog();

if (input.DialogResult is true)
           {
               DiffView.OldText = input.txtOldText.Text;
               DiffView.NewText = input.txtNewText.Text;
           }
       }
   }
}

InputOldeTextAndNewText.xaml

<Window
   x:Class="TextComparisonTool.InputOldeTextAndNewText"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
   xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
   Title="输入新旧文本"
   Width="850"
   Height="500"
   Icon="DiffPlex.ico"
   ResizeMode="CanMinimize"
   WindowStartupLocation="CenterScreen"
   mc:Ignorable="d">
   <Border Margin="5" CornerRadius="11">
       <StackPanel>
           <TextBlock Style="{DynamicResource MaterialDesignBody1TextBlock}" Text="源文本" />
           <TextBox
               x:Name="txtOldText"
               AcceptsReturn="True"
               MaxLines="10"
               MinLines="10"
               TextWrapping="Wrap" />
           <TextBlock
               VerticalAlignment="Center"
               Style="{DynamicResource MaterialDesignBody1TextBlock}"
               Text="新文本" />
           <TextBox
               x:Name="txtNewText"
               AcceptsReturn="True"
               MaxLines="10"
               MinLines="10"
               TextWrapping="Wrap" />
           <Button
               x:Name="BtnText"
               Margin="10"
               Click="BtnText_Click"
               Content="确认"
               Style="{DynamicResource MaterialDesignFlatButton}" />
       </StackPanel>
   </Border>
</Window>

InputOldeTextAndNewText.xaml.cs

using System.Windows;

namespace TextComparisonTool
{
   /// <summary>
   /// InputOldeTextAndNewText.xaml 的交互逻辑
   /// </summary>
   public partial class InputOldeTextAndNewText : Window
   {
       public InputOldeTextAndNewText()
       {
           InitializeComponent();
       }

private void BtnText_Click(object sender, RoutedEventArgs e)
       {
           DialogResult = true;
       }
   }
}

效果图

WPF+DiffPlex实现文本比对工具

WPF+DiffPlex实现文本比对工具

来源:https://blog.csdn.net/qq_43562262/article/details/127921043

标签:WPF,DiffPlex,文本,比对
0
投稿

猜你喜欢

  • java面试题之数组中的逆序对

    2021-08-05 10:51:02
  • Java编写日历表的3种方式

    2023-02-16 00:50:31
  • C#简单操作MongoDB的步骤全纪录

    2023-06-25 06:52:40
  • Java中ArrayList和LinkedList之间的区别_动力节点Java学院整理

    2023-03-30 18:16:29
  • SpringMVC中Model与Session的区别说明

    2023-07-07 20:42:58
  • Spring类型转换 ConversionSerivce Convertor解析

    2022-03-25 06:55:46
  • java反射遍历实体类属性和类型,并赋值和获取值的简单方法

    2023-07-15 04:37:18
  • formfile文件上传使用示例

    2023-06-23 03:41:58
  • 批处理一键安装JDK/一键安装JRE和自动配置Java环境变量

    2023-11-29 05:28:30
  • Mybatis分页插件使用方法详解

    2021-10-12 06:59:30
  • Java 合并多个MP4视频文件

    2022-08-23 12:09:19
  • MyBatis中PageHelper不生效的解决方案

    2022-10-23 11:46:47
  • Android仿正点闹钟时间齿轮滑动效果

    2022-09-06 09:27:46
  • Spark网站日志过滤分析实例讲解

    2021-06-08 12:59:24
  • 44条Java代码优化建议

    2023-12-22 06:03:49
  • Android SurfaceView拍照录像实现方法

    2022-06-18 17:07:20
  • C#窗体程序实现全屏及取消全屏步骤

    2023-02-18 11:48:38
  • 关于HashMap相同key累加value的问题

    2022-02-13 13:32:18
  • Spring Boot Logback配置日志过程解析

    2022-12-09 18:08:06
  • Java 执行CMD命令或执行BAT批处理方式

    2022-10-15 03:57:38
  • asp之家 软件编程 m.aspxhome.com