【发布时间】:2011-03-27 05:05:18
【问题描述】:
我有一个非常简单的测试应用程序,用于玩 Windows Phone 7。我刚刚在标准 UI 模板中添加了 TextBox 和 TextBlock。唯一的自定义代码如下:
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,0"
Name="textBox1" Text="" VerticalAlignment="Top"
Width="460" TextChanged="TextBoxChanged" />
但是,每次我在模拟器中运行时按下一个键(屏幕键盘或物理键盘,按下暂停以启用后者)它都会将计数器增加两次,在 TextBlock 中显示两行.我尝试过的所有事情都表明该事件确实触发了两次,我不知道为什么。我已经验证它只被订阅一次 - 如果我在 MainPage 构造函数中取消订阅,那么当文本更改时(文本块)什么也不会发生。
我已经在常规 Silverlight 应用程序中尝试了等效代码,但它并没有出现在那里。我目前没有实体电话可以重现此内容。我没有发现任何记录表明这是 Windows Phone 7 中的一个已知问题。
谁能解释我做错了什么,或者我应该将此报告为错误吗?
编辑:为了减少这归结为拥有两个文本控件的可能性,我尝试完全删除 TextBlock,并将 TextBoxChanged 方法更改为 just 增量 counter。然后我在模拟器中运行,输入 10 个字母,然后 然后 在 counter++; 行上放置一个断点(只是为了消除任何闯入调试器导致问题的可能性) - 它将counter 显示为 20。
编辑:我现在 asked in the Windows Phone 7 forum... 我们会看看会发生什么。
【问题讨论】:
-
只是出于兴趣-如果您检查事件内部,两次事件触发时 TextBox 的内容是否相同?我真的不知道为什么会发生这种情况,因为我通常使用 MVVM 和数据绑定而不是事件处理来处理这些事情(Silverlight 和 WPF,对 WP7 没有太多经验)。
-
@Rune:是的,我看到两次“之后”文本。因此,如果我按“h”并显示
textBox1.Text作为 textBlock1 添加的一部分,它将在两行中显示“h”。 -
你提到了 2 个键盘,这可能是一个因素吗?你能禁用一个吗?也许您可以检查两个调用中 TextChangedEventArgs 的所有成员是否相等?
-
@Henk:大部分时间我都没有费心启用物理键盘......只是看看这是否会产生影响。
TextChangedEventArgs并没有很多可用的 - 只有OriginalSource,它始终为空。 -
它看起来确实像一个错误,它与键盘无关,因为您只需为 Text 属性分配一个新值即可获得相同的结果,TextChanged 仍会触发两次。
标签: c# xaml silverlight windows-phone-7 textbox