WPF-避免在RichTexBox的文件加载中触发TextChanged事件

时间:2019-04-25 16:06:06

标签: c# wpf

问题:有什么方法可以检测RTB应用的RichTextBoxWPF)中文件加载的发生吗?我在this事件列表中找不到这样的事件;或该列表中有一些事件可用于解决以下问题:

背景:允许用户进行更改后load a file in the RTB并关闭它(如果需要)。但是在用户关闭文件之前,我的应用程序会通过在TextChanged事件中放置bTextChanged标志来检查是否进行了更改。但是我注意到TextChanged事件即使在加载文件时也会触发。甚至更糟的是,该事件会针对新加载的文件的每个字符触发-如果加载的文件过长,最终会降低应用程序的性能。因此,也许只有在加载文件后更改文件中的文本时,才会触发TextChanged事件触发。

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)
            {
                ....
            }
        }
    }
....
....
}

0 个答案:

没有答案