我有一个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
本身。