WPF+DiffPlex实现文本比对工具
作者:黑夜中的潜行者 发布时间:2022-04-20 21:32:07
标签:WPF,DiffPlex,文本,比对
背景
现行的文本编辑器大多都具备文本查询的能力,但是并不能直观的告诉用户两段文字的细微差异,所以对比工具在某种情况下,就起到了很便捷的效率。
关于 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;
}
}
}
效果图
来源:https://blog.csdn.net/qq_43562262/article/details/127921043


猜你喜欢
- Random random = new Random((int)(DateTime.Now.Ticks)); &nbs
- SpringBoot中的过滤器 * 操作与springmvc中的几乎一样所以这里也不过多介绍了,下面举两
- 前言早期在学习泛型的协变与逆变时,网上的文章讲解、例子算是能看懂,但关于逆变的具体应用场景这方面的知识,我并没有深刻的认识。本文将在具体的场
- 读取Java文件到byte数组的三种方法(总结)package zs;import java.io.BufferedInputStream;
- jstat命令简介jstat(Java Virtual Machine Statistics Monitoring Tool)是JDK提供的
- 现在版本更新有两种处理方式:跳转到App应用市场,通过应用市场下载更新安装。在App内进行Apk下载,下载完成后更新安装。实现思路:请求后台
- 什么是局部类型?C# 2.0 引入了局部类型的概念。局部类型允许我们将一个类、结构或接口分成几个部分,分别实现在几个不同的.cs文件中。局部
- 一、点睛邻接矩阵通常采用一个一维数组存储图中节点的信息,采用一个二维数组存储图中节点之间的邻接关系。邻接矩阵可以用来表示无向图、有向图和网。
- 一、作用及种类UML类图建模语言或标准建模语言类的属性、操作中的可见性使用+、#、-分别表示public、protected、private
- 【前言】Mybatis 除了 XML 配置写法,还可以使用注解写法。首先需要引入 Mybatis 的依赖:<dependency>
- •readonly和const都是用来标识常量的[1]。•const可用于修饰class的field或者一个局部变量(local varia
- 前言最近遇到很有意思转换二进制的问题,有部分童鞋俨然已了解,可能也有一部分童鞋没碰到过也就不知情,这里我们来深入学习下转换二进制所带来的问题
- 目录堆内存溢出原因:解决方案:栈内存溢出原因:解决方案:方法区和运行时常量池内存溢出原因:本机直接内存溢出原因:解决方案:元空间内存溢出原因
- 前言这几天琢磨着开发个个人作品的时候,发现原来Unity3D官方没有提供圆锥体的创建功能,就自己做了个编辑器扩展。鉴于之前搜索Mesh编程的
- 本文实例讲述了C#中WinForm跨线程访问控件的实现方法,分享给大家供大家参考。具体实现方法如下:1、跨线程访问控件委托和类的定义usin
- 介绍使用mybatis时可以使用二级缓存提高查询速度,进而改善用户体验。使用redis做mybatis的二级缓存可是内存可控<如将单独
- 以前只知道@在C#中为了写文件路径的\不要加转义符而在前面加上@标识符,没想到@还有其他的作用1.忽略转义字符例如string fileNa
- 快速回顾1.Lambda表达式: (参数) -> {主体}Lambda表达式打开了函数式编程爱好者继续使用Java的大门。Lambda
- C#延时函数使用在线程中如果需要延时,尽量不要使用Sleep()函数,这样会导致时间片切到别的线程中。使用如下函数:
- 两个对象进行比较相等,有两种做法:1、情况一:当仅仅只是判断两个对象是否相等时,只需重写equals()方法即可。这里就不用说明2、情况二: