微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

silverlight – TextBox.TextChanged事件在Windows Phone 7模拟器上触发两次

我有一个非常简单的测试应用程序只是为了玩Windows Phone 7.我刚刚添加一个TextBox和TextBlock到标准UI模板。唯一的自定义代码如下:

public partial class MainPage : PhoneApplicationPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    private int counter = 0;

    private void TextBoxChanged(object sender,TextChangedEventArgs e)
    {
        textBlock1.Text += "Text changed " + (counter++) + "\r\n";
    }
}

TextBox.TextChanged事件在XAML中连接到TextBoxChanged:

<TextBox Height="72" HorizontalAlignment="Left" Margin="6,37,0"
         Name="textBox1" Text="" VerticalAlignment="Top"
         Width="460" TextChanged="TextBoxChanged" />

然而,每次我在模拟器中运行时按下一个键(屏幕键盘物理键盘,按下暂停启用后者),它会增加计数器两次,在TextBlock中显示两行。我试过的一切表明事件是真正发射两次,我不知道为什么。我已经验证它只订阅一次 – 如果我取消订阅MainPage构造函数,当文本更改时,根本不会发生任何事情(对于文本块)。

我试过在一个普通的Silverlight应用程序的等效代码,它没有发生那里。我没有物理手机来重现这一点。我没有找到任何记录这是一个已知的问题在Windows Phone 7。

任何人都可以解释我做错了什么,或者我应该报告为一个错误

编辑:为了减少这是由于具有两个文本控件的可能性,我已经尝试删除TextBlock完全,并将TextBoxChanged方法更改为增量计数器。然后我在模拟器中运行,键入10个字母,然后在柜台上放一个断点;线(只是为了摆脱任何可能性,打破调试器是导致问题) – 它显示计数器为20。

编辑:我现在asked in the Windows Phone 7 forum …我们会看到会发生什么。

解决方法

TextChanged事件在WP7中触发两次的原因是TextBox如何为Metro外观模板化的副作用。

如果在Blend中编辑TextBox模板,您将看到它包含禁用/只读状态的辅助TextBox。这导致,作为副作用,事件发射两次。

如果不需要这些状态,可以更改模板以删除额外的TextBox(和关联状态),或者修改模板以在禁用/只读状态下实现不同的外观,而不使用辅助TextBox

这样,事件将只触发一次。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐