我有一些页面包含 TextBox 或 PhoneTextBox (来自工具包):xaml代码的一部分。 我为scrollviewer(不透明度和XProperty)设置了动画,因为我为文本框设置了datacotext。
<ScrollViewer x:Name="ContentScroller"
Visibility="Collapsed"
Margin="35,0,35,0">
<ScrollViewer.RenderTransform>
<TranslateTransform />
</ScrollViewer.RenderTransform>
<Grid x:Name="ContentGrid">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock x:Name="CreationgDate"
Text="{Binding CreationDate, StringFormat='Created: {0:dd.MM.yyyy HH:mm}'}"
Style="{StaticResource CreationDateTextStyle}"
Grid.Row="0"/>
<toolkit:PhoneTextBox x:Name="BodyData"
InputScope="Chat"
Text="{Binding Body, UpdateSourceTrigger=Explicit}"
LostFocus="BodyData_LostFocus"
TextWrapping="Wrap"
AcceptsReturn="True"
Grid.Row="1">
</toolkit:PhoneTextBox>
</Grid>
</ScrollViewer>
我在事件LostFocus中更新了DataSource:
// this I set datacontex
private async void Item_Click(object sender, RoutedEventArgs e)
{
PageHeader.DataContext = CreationgDate.DataContext = BodyData.DataContext = activeItem;
await AnimateChangePage();
}
private void BodyData_LostFocus(object sender, RoutedEventArgs e)
{
BindingExpression be = NoteBodyData.GetBindingExpression(PhoneTextBox.TextProperty);
be.UpdateSource();
}
问题:当文本框中的文本有400-500个字符或更多时,文本框中的文本输入非常慢,键盘有滞后响应。 我在真实设备(不是模拟器)中测试应用程序,具有相同功能的其他应用程序(来自应用程序商店)工作正常,没有滞后和慢速输入。
请帮我解决这个问题。 对不起我的郎(不是英语):)。
答案 0 :(得分:1)
在我们的评论讨论之后,这是我能给出的最佳答案:
以调试模式在手机上运行应用程序。
直接或者当问题发生时,在body属性的set语句中设置断点(如果property = value,则在上面)。当命中断点时,使用调用堆栈来计算导致更新的内容和监视窗口以查看当前值。您可能会发现某些内容正在尝试重复更新。
如果还有其他任何更新正文的内容,则会发出订阅事件或触发与正文相关的视图模型事件,并在其上粘贴断点并查看它们是否过度触发。
如果做不到这一点,到处都是断点。例如,由于某种原因,它可能会失去焦点,并且触发该事件的次数超出应有的范围。它也可能是在后台发生的其他事情。
所有失败,请尝试不绑定文本框并使用WinForms样式设置值,然后稍后再将其恢复。删除所有不必要的事件然后,您可以将其重新构建并确定原因。如果在没有绑定和附加事件的情况下它很慢,那么我真的会缺乏想法。
一般来说,我发现这种事情与我没想到的事件有关。我看到你正在检查传入的值是不同的,这将停止可怕的MVVM属性循环,但是没有看到应用程序的其余部分,很难进一步缩小问题。