多次触发事件 "TextChanged"

Event "TextChanged" is fired multiple times

我在这里问了一个问题如何垂直集中richtextbox:

关注代码:

XAML:

<Border BorderBrush="Black" BorderThickness="1" Margin="10,51,385,14.2" Grid.ColumnSpan="2">
            <Grid x:Name="Grid_Principal" Height="285" Background="Black" >
                <Grid.RowDefinitions>
                    <RowDefinition Height="*"/>
                    <RowDefinition Height="auto"/>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>
                <ScrollViewer x:Name="scrollviewer" Grid.Row="1" MaxHeight="285" VerticalScrollBarVisibility="Auto" Margin="10,0.4,0.4,0.2">
                    <RichTextBox
                        x:Name="richtextbox" 
                        Width="332.4"
                        VerticalAlignment="Top" 
                        FontSize="14" 
                        VerticalContentAlignment="Center" 
                        HorizontalContentAlignment="Center" 
                        UseLayoutRounding="False" 
                        VerticalScrollBarVisibility="Auto" 
                        Block.TextAlignment="Center"
                        Grid.ColumnSpan="2" 
                        HorizontalAlignment="Left" 
                        BorderThickness="0" 
                        Background="{x:Null}" 
                        Foreground="White" 
                        TextChanged="Richtextbox_TextChanged">
                        <FlowDocument>
                            <Paragraph>
                                This is flow content and you can
                                <Bold>edit me!</Bold>
                            </Paragraph>
                        </FlowDocument>
                    </RichTextBox>
                </ScrollViewer>
            </Grid>
        </Border>

C#:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    richtextbox.AppendText("Hello world, I'm writing in C#");
}

private void Richtextbox_TextChanged(object sender, TextChangedEventArgs e)
{
   //This event is fired multiple times
}

TextChanged 事件被触发了几次,在调试器模式下完成,这里被触发了 6 次。

我想在更改文本时调用一个函数,有什么解决方案吗?

如前所述,文本会在每次击键时发生变化,因此您的事件每次都会触发。

你实际上必须决定你想要什么样的行为。我经常做的一些事情:

想要"Enter"键来确认文本,然后(伪代码):

KeyDown="Richtextbox_TextChanged"> (XAML)
if (e.Key.Equals(Key.Return)) doWhatYouWannaDo(); (CODE)

想要更改焦点以确认文本:

LostFocus="Richtextbox_TextChanged"> (XAML), 
doWhatYouWannaDo(); (CODE)

其中 CODE 将放在 Richtextbox_TextChanged() 的主体内,或者您想要命名它。

编辑:您还可以做的是在经过一段时间后验证文本(即在计时器事件中)。但我不喜欢那个,因为它以某种方式不确定地与用户交互。