.NET中查看器控件的差异

本文关键字:控件 NET | 更新日期: 2023-09-27 18:19:52

我有一个具有挑战性的问题。我的要求就像我有一个xml文件,它的值像

Name 0,20 
age 21,4 

这就像字段名称值将出现在下面的位置。我的xml文件中有100条这样的记录。我想动态读取这个xml文件,它就是布局。并且比较由两个不同公司生成的两个输出文件。Output1和Output2…其中该位置的Name和age的值将在那里。我想读取这些值,并手动向用户显示这两个文件在这些区域存在差异。

在.net、C#窗口、wpf应用程序中是否有任何动态查看器控件可以在两个文件中显示这些差异?

.NET中查看器控件的差异

这不是一个控件,而是一个用c#编写的完整文件差异工具。源代码也可用(CharityWare)。

http://www.menees.com/

您可以查看源代码,了解文件差异是如何实现的。

我想到的几种可能的解决方案之一是:

  1. 在实践中,使用XPathNavigator来解析这3个文件并比较它们的内容
  2. 对于可视化,使用WPF RichTextBox,如果你可以加载完整的格式化文本和其中的格式/颜色部分,你可以使用它来突出显示发现的差异

WPF RichTextBox示例1WPF RichTextBox示例2

你需要考虑的是,WPF TextBox基本上很容易使用,但也会消耗大量内存,所以要注意你的应用程序的内存消耗。

当然还有其他编辑可以使用,比如Scintilla,但我认为这种情况下的故事会变得更加复杂。

编辑:可能还有另一个编程解决方案,只需使用WinMerge并使用所需参数运行该程序(免费)。因此,它将关注显示/突出显示两个不同文件之间的差异。

选择权在你。

WPF中现有的DataGrid类将很好地满足这一需求,如果您设计一个类似。。。

public class Difference
{
    public string PropertyName { get; set; }
    public string File1Value { get; set; }
    public string File2Value { get; set; }
}

这一类人会持有不同意见。每次发现希望用户看到的差异时,您都会创建一个此类的实例,并将每个实例添加到集合中。。。

public ObservableCollection<Difference> Differences = new ObservableCollection<Difference>();

此集合将绑定到DataGrid的ItemsSource属性。

使用这种方法,您不需要创建新控件或使用第三方控件。如果您想启动列标题,可以使用DataGridColumns和Templates来完成此操作。