首页 > 解决方案 > WPF - 避免在 RichTexBox 上的文件加载时触发 TextChanged 事件

问题描述

问题:有什么方法可以检测应用程序的RichTextBox ( RTB) 中文件加载的发生WPF吗?我在这个事件列表中没有找到这样的事件;或者该列表中可能有一些事件可用于解决以下问题:

背景我允许用户在 RTB 中加载文件并在进行更改后关闭它(如果需要)。但在用户关闭文件之前,我的应用程序通过在TextChanged事件中放置bTextChanged标志来检查更改是否已进行。但我注意到即使加载文件也会触发该事件。更糟糕的是,新加载文件的每个字符都会触发该事件——如果加载的文件太长,最终会降低应用程序的性能。所以也许有一种解决方法可以使事件仅在文件加载后更改文件中的文本时触发。TextChangedTextChanged

public partial class MainWindow : Window
{
    string sgFileName = "";
    bool bTextChanged = false;
    ....
    ....
        private void BtnOpenFile_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Filter = "Rich Text Format (*.rtf)|*.rtf|All files (*.*)|*.*";
            if (dlg.ShowDialog() == true)
            {
                sgFileName = dlg.FileName;
                FileStream fileStream = new FileStream(sgFileName, FileMode.Open);
                TextRange range = new TextRange(mainRTB.Document.ContentStart, mainRTB.Document.ContentEnd);
                range.Load(fileStream, DataFormats.Rtf);
            }
        }

        private void MainRTB_TextChanged(object sender, TextChangedEventArgs e)
        {
            bTextChanged = true;
        }

    private void BtnCloseDocument_Click(object sender, RoutedEventArgs e)
    {
        if (bTextChanged)
        {
            MessageBoxResult result = MessageBox.Show("Content has changed, do you want to save the changes?", "Content has Changed!", MessageBoxButton.YesNoCancel);
            switch (result)
            {
                ....
            }
        }
    }
....
....
}

标签: c#wpf

解决方案


推荐阅读