多次触发事件 "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() 的主体内,或者您想要命名它。
编辑:您还可以做的是在经过一段时间后验证文本(即在计时器事件中)。但我不喜欢那个,因为它以某种方式不确定地与用户交互。
我在这里问了一个问题如何垂直集中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() 的主体内,或者您想要命名它。
编辑:您还可以做的是在经过一段时间后验证文本(即在计时器事件中)。但我不喜欢那个,因为它以某种方式不确定地与用户交互。