事件“TextChanged”被多次触发

时间:2018-02-27 18:42:27

标签: c# wpf richtextbox

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

关注代码:

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次。

我想在文本更改时调用函数,任何解决方案?

1 个答案:

答案 0 :(得分:0)

正如已经说过的那样,每次按键时文本都会发生变化,因此每次都会触发事件。

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

旺旺&#34;输入&#34;确认文本的关键,然后(伪代码):

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

希望焦点更改以确认文字:

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

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

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