RichTextBox TextChanged在页面初始化时被调用



我有一个WPF RichTextBox,当用户在其中输入一些东西时,我想检测到这一点并调用一个函数。

该函数检查我的页面上的所有其他控件,看看它们是否都被选中,然后激活NEXT按钮。(我在做问卷)

我遇到的问题是,当页面初始化时,当我的程序启动,RichTextBox TextChanged事件被调用,其他控件(ComboBoxes)尚未初始化,程序爆炸。

我怎么能阻止TextChanged事件从启动调用?或者我该如何处理这种情况?

public PageFaultReport()
{
    InitializeComponent();
}
private void RichTextBox_DescribeProblem_TextChanged(object sender, TextChangedEventArgs e)
{
    ActivateNextIcon();
}
private void ActivateNextIcon()
{
    ComboBoxItem OperatingSystem = (ComboBoxItem)Combo_OS.SelectedItem;
    ComboBoxItem Version         = (ComboBoxItem)Combo_Version.SelectedItem;
    TextRange textRangeDetailedSteps = new TextRange(RichTextBox_DescribeProblem.Document.ContentStart, RichTextBox_DescribeProblem.Document.ContentEnd);
    int detailedStepsLength = textRangeDetailedSteps.Text.Length;
    if (YesNo_Permission.Selected == true && OperatingSystem != null && Version != null && YesNo_HardwareKey.Selected == true && YesNo_ExceededConnections.Selected == true && detailedStepsLength > 0)
    {
        Image_Forward.IsEnabled = true;
    }
}

编辑

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
  xmlns:UserControls="clr-namespace:InstallerToolkit.UserControls" x:Class="InstallerToolkit.Pages.PageFaultReport" 
  mc:Ignorable="d" 
  d:DesignHeight="525" d:DesignWidth="1050"
  Title="PageFaultReport"
  Loaded="Page_Loaded">
<RichTextBox x:Name="RichTextBox_DescribeProblem" FontSize="14" HorizontalAlignment="Left" Height="93" VerticalAlignment="Top" Width="894" Margin="75,295,0,0" TextChanged="RichTextBox_DescribeProblem_TextChanged" >
    <FlowDocument>
        <Paragraph LineHeight="1"/>
    </FlowDocument>
</RichTextBox>

你可以通过设置Bool值来防止它,

bool isFired = false;
private void RichTextBox_DescribeProblem_TextChanged(object sender, TextChangedEventArgs e)
    {
       if(isFired == false)
       {
         e.handled = true;
         isFired = true;
       } 
       else
       {
         ActivateNextIcon();
       }
    }

你在XAML中设置了一些值所以它应该被初始化。我通常处理它类似于Sajeetharan,但检查IsLoaded而不是设置自定义标志:

private void RichTextBox_DescribeProblem_TextChanged(object sender, TextChangedEventArgs e)
{
    if (!this.IsLoaded) return;
    //whatever
}

在我的情况下,this是一个Window,但你可以采取一些家长或RichTextBox本身。

最新更新