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
投稿

猜你喜欢

  • C#中使用反射遍历一个对象属性及值的小技巧

    2021-12-10 18:15:43
  • java实现字符串四则运算公式解析工具类的方法

    2021-11-03 09:22:23
  • Android实现简单旋转动画

    2023-11-07 09:50:58
  • Android WindowManger实现桌面悬浮窗功能

    2023-08-01 02:16:10
  • 一款适用于Android平台的俄罗斯方块

    2023-02-25 02:38:35
  • Java实现斗地主最简代码实例

    2023-07-11 18:40:02
  • Java微信公众平台之获取地理位置

    2021-05-28 19:36:40
  • Quarkus中ConfigSourceInterceptor的加密配置实现

    2021-10-08 10:47:14
  • C#合并BitMap图像生成超大bitmap

    2023-12-08 18:24:11
  • Android读取手机通讯录联系人到自己项目

    2022-01-04 06:37:48
  • 在C#和Java语言中for和foreach的区别详解

    2023-01-29 11:31:13
  • Java开发druid数据连接池maven方式简易配置流程示例

    2021-05-26 14:57:23
  • Java深入讲解instanceof关键字的使用

    2023-02-27 13:05:05
  • Android学习之Broadcast的简单使用

    2023-11-19 15:18:02
  • Java线程池必知必会知识点总结

    2021-07-30 13:08:02
  • SQL语句删除和添加外键、主键的方法

    2023-04-16 22:18:35
  • android照相、相册获取图片剪裁报错的解决方法

    2021-11-21 20:18:14
  • C#中程序自删除实现方法

    2021-06-01 19:47:29
  • Java中的SuppressWarnings注解使用

    2023-08-18 17:31:19
  • Java 读取外部资源的方法详解及实例代码

    2023-01-27 21:19:18
  • asp之家 软件编程 m.aspxhome.com