【WPF】DiffPlex 文本比对工具

news2025/8/14 18:54:23

【WPF】DiffPlex 文本比对工具

  • 背景
  • 关于 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;
        }
    }
}

效果图

在这里插入图片描述

在这里插入图片描述

源码下载地址

文本比对工具源码下载地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/14920.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

D. Extreme Subtraction(差分)

Problem - 1443D - Codeforces 给你一个由n个正整数组成的数组a。 你可以随意使用下面的操作&#xff1a;选择任何一个1≤k≤n的整数&#xff0c;做两件事中的一件。 将数组中的前k个元素递减1。 将数组的最后k个元素递减1。 例如&#xff0c;如果n5&#xff0c;a[3,2,2,1,4]…

【Pytorch with fastai】第 16 章 :训练过程

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

利用jemalloc优化mysql

此方法管理mysql内存也存在一定的弊端&#xff0c;根据自身情况进行选择 优点&#xff1a; jemalloc的确能对内存做一定优化&#xff0c;但是发现并不能解决所有内存碎片问题&#xff0c;只能说有一定缓解作用。 缺点&#xff1a; 使用jemalloc会带来内存增加问题&#xff0…

[附源码]java毕业设计零食销售系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

MySQL8.0 MySQL事务日志、REDO日志、UNDO日志

文章目录学习资料MySQL事务日志REDO日志REDO日志的好处、特点好处特点REDO的组成REDO的整体流程REDO LOG的刷盘策略流程图UNDO日志如何理解UNDO日志UNDO日志的作用作用1&#xff1a;回滚数据作用2&#xff1a;MVCC小结学习资料 【MySQL数据库教程天花板&#xff0c;mysql安装到…

i2c协议的特点是什么,老司机带你深入了解

I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线(一根数据线SDA,一根时钟线SCL)即可在连接于总线上的器件之间传送信息。 在I2C总线中, 各部分器件如下: 主机初始化发送&#xff0c;产生时钟信号和终止发送的器件 从器件被主机寻址的器件 发送器…

浅谈选择示波器时的“5倍法则”

众所周知&#xff0c;选择示波器时经常会用到5倍法则&#xff0c;其实不仅仅是针对带宽&#xff0c;当涉及到快沿信号上升时间测试时&#xff0c;根据上升时间选择示波器也会用到5倍法则。本文将分别对这两种情况下的5倍法则展开讨论&#xff0c;并介绍当考虑示波器和探头构成的…

从结构上浅谈FPGA实现逻辑的原理

FPGA是啥&#xff1f;你要是在百度上一查&#xff0c;多数会搜到什么 Field Programmable Gate Array&#xff0c;现场可编程门整列嘛&#xff0c;但是这句话对咱们新手理解FPGA起到的作用十分有限&#xff0c;其实不单是新手朋友&#xff0c;就连我这个玩了几个月的FPGAer也不…

(三)Logistic回归的梯度下降

一、单个样本的Logistic回归的梯度下降法 在本节中&#xff0c;我们学习如何计算偏导数来实现Logistic回归的梯度下降法。 我们将使用导数流程图来计算梯度。 首先回顾一下Logistic回归的公式 zwTxbz w^TxbzwTxb y^aσ(z)11e−z\widehat{y}a \sigma(z) \frac 1 {1e^{-z}}y​…

会员中心通过AJAX、JSON、PHP、MySql等技术实现注册和登录功能(1+X Web前端开发中级 例题)——初稿

&#x1f4c4;题目要求 阅读下列说明、效果图和代码&#xff0c;进行动态网页开发&#xff0c;补充代码&#xff08;1&#xff09;-&#xff08;30&#xff09;。会员中心&#xff0c;需要先注册后登录&#xff0c;先要求应用HTML、CSS、AJAX、JSON、PHP、MySql等技术实现注册…

反射机制(复习)

反射机制 反射机制定义反射机制的功能反射机制主要的API反射机制演示对 Class 的理解Class实例获取的四种方式Class 对应内存结构说明加载Properties文件的俩种方式调用运行时类的结构调用运行时类的指定属性调用运行时类指定的方法调用运行时类指定的构造器反射的应用&#xf…

技术公开课|深度剖析 Java 的依赖管理,快速生成项目 SBOM清单

背景 近年来软件供应链安全风险涌现&#xff0c;无论是 Fastjson、Log4j 等基础组件的 0day&#xff0c;来源于开源的风险事件不断上升&#xff0c;对于研发以及安全同学来说&#xff0c;都是在不断的摸索建立有效的预防及解决机制&#xff0c;公开课将以风险治理为最终目标、…

Java -- 每日一问:谈谈MySQL支持的事务隔离级别,以及悲观锁和乐观锁的原理和应用场景?

典型回答 所谓隔离级别&#xff08;Isolation Level&#xff09;&#xff0c;就是在数据库事务中&#xff0c;为保证并发数据读写的正确性而提出的定义&#xff0c;它并不是 MySQL 专有的概念&#xff0c;而是源于ANSI/ISO制定的SQL-92标准。 每种关系型数据库都提供了各自特…

(STM32)从零开始的RT-Thread之旅--PWM驱动ST7735调光

上一章&#xff1a; (STM32)从零开始的RT-Thread之旅--SPI驱动ST7735(1) 上一章我们先用SPI读取到了LCD的ID&#xff0c;这一章则是使用PWM调光点亮屏幕&#xff0c;因为测试这块屏幕时&#xff0c;发现直接设置背光引脚为高好像无法点亮&#xff0c;好像必须使用PWM调光&…

信而泰自动化OSPFv2测试小技巧

OSPFv2协议简介 OSPFv2&#xff08;开放式最短路径优先版本2&#xff09;是互联网协议&#xff08;IP&#xff09;网络的路由协议。它使用链路状态路由&#xff08;LSR&#xff09;算法&#xff0c;并且属于在单个自治系统&#xff08;AS&#xff09;内运行的内部网关协议&…

Inter RealSense深度相机ROS驱动

文章目录知识目标1. 深度相机的分类及工作原理2. Inter RealSense D415相机知识目标 学习深度相机的分类和工作原理&#xff1b; 学习Intel RealSense D415相机硬件构成和工作原理。 1. 深度相机的分类及工作原理 深度相机&#xff08;可以测量物体到相机的距离&#xff09;…

Java三大特性篇之——多态篇(千字详解)

JAVA面向对象编程有三大特性&#xff1a;封装、继承、多态,在我们学习了继承后&#xff0c;我们将继续学习多态。 文章目录前言&#xff1a;什么是多态&#xff1f;一、多态实现二、再谈重写三、向上转移四、多态优缺点五、多态案例最后前言&#xff1a;什么是多态&#xff1f;…

MR场景直播-帮助企业高效开展更有意思的员工培训

阿酷TONY / 2022-11-18 / 长沙 MR场景直播、MR培训场景和内容呈现以及直播互动功能&#xff0c;帮助企业高效开展员工培训&#xff0c;让整个培训过程更高效~~~ MR场景直播有哪些有意思的地方呢&#xff1f;先来一个图&#xff1a; ▲ 模拟真实光照还原现实景 丰富培训场景&a…

SQL实用功能手册

SQL实用功能手册 SQL基础复习 SQL结构化查询语言&#xff0c;是一种访问和处理数据库的计算机语言 对数据库操作对表操作对数据进行CRUD操作操作视图、存储过程、索引 环境基础操作 安装mysql、启动mysql、配置环境变量检查mysql版本&#xff1a;mysql --version链接mysql…

开源共建 | Dinky 扩展批流统一数据集成框架 ChunJun 的实践分享

一、前言 ChunJun&#xff08;原FlinkX&#xff09;是一个基于 Flink 提供易用、稳定、高效的批流统一的数据集成工具&#xff0c;既可以采集静态的数据&#xff0c;比如 MySQL&#xff0c;HDFS 等&#xff0c;也可以采集实时变化的数据&#xff0c;比如 binlog&#xff0c;Ka…