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

时间:2014-01-17 15:48:42

标签: c# xaml windows-phone-8 textbox

我有一些页面包含 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个字符或更多时,文本框中的文本输入非常慢,键盘有滞后响应。 我在真实设备(不是模拟器)中测试应用程序,具有相同功能的其他应用程序(来自应用程序商店)工作正常,没有滞后和慢速输入。

请帮我解决这个问题。 对不起我的郎(不是英语):)。

1 个答案:

答案 0 :(得分:1)

在我们的评论讨论之后,这是我能给出的最佳答案:

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

  2. 直接或者当问题发生时,在body属性的set语句中设置断点(如果property = value,则在上面)。当命中断点时,使用调用堆栈来计算导致更新的内容和监视窗口以查看当前值。您可能会发现某些内容正在尝试重复更新。

  3. 如果还有其他任何更新正文的内容,则会发出订阅事件或触发与正文相关的视图模型事件,并在其上粘贴断点并查看它们是否过度触发。

  4. 如果做不到这一点,到处都是断点。例如,由于某种原因,它可能会失去焦点,并且触发该事件的次数超出应有的范围。它也可能是在后台发生的其他事情。

  5. 所有失败,请尝试不绑定文本框并使用WinForms样式设置值,然后稍后再将其恢复。删除所有不必要的事件然后,您可以将其重新构建并确定原因。如果在没有绑定和附加事件的情况下它很慢,那么我真的会缺乏想法。

  6. 一般来说,我发现这种事情与我没想到的事件有关。我看到你正在检查传入的值是不同的,这将停止可怕的MVVM属性循环,但是没有看到应用程序的其余部分,很难进一步缩小问题。