Windows Phone 8在TextBox或PhoneTextBox中输入缓慢的文本

f14shm4n

我有一些带有TextBoxPhoneTextBox的页面(来自工具箱):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中更新了数据源:

    // 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个字符或更多时,则文本框中的文本输入会非常缓慢,并且键盘会有滞后响应。我在真实设备(不是模拟器)中测试应用程序,其他具有相同功能的应用程序(来自应用程序商店)可以正常运行,而不会出现滞后和缓慢输入的情况。

请帮我做这件事。很抱歉我的lang(不是英语):)。

曲棍球

经过我们的评论讨论,这是我能给出的最佳答案:

  1. 在手机上以调试模式运行该应用程序。

  2. 立即或者在发生问题时,在body属性的set语句中设置一个断点(如果property = value上方)。当达到断点时,使用调用堆栈找出导致更新的原因,并通过监视窗口查看当前值。您可能会发现某些内容正在尝试对其进行反复更新。

  3. 如果有任何其他更新主体的事件,则有与主体相关的已订阅事件或被触发的viewmodel事件,请在它们上贴上断点,并查看它们是否触发过多。

  4. 失败的话,到处都存在断点。例如,由于某种原因,它可能会失去焦点,并且触发该事件的次数超过了应有的程度。也可能是其他在后台运行的东西。

  5. 所有失败的方法,请尝试不绑定文本框,并使用WinForms样式设置该值,然后稍后再将其取回。删除所有不必要的事件。然后,您可以备份它并确定原因。如果没有绑定和附加事件的速度很慢,那么我真的会失去主意。

通常,我发现这种事情与我未曾想到的事件触发有关。我看到您正在检查传入的值是否不同,这将停止可怕的MVVM属性循环,但是如果看不到应用程序的其余部分,则很难进一步缩小问题的范围。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章