gpt4 book ai didi

c# - TextBox.TextChanged 事件在 Windows Phone 7 模拟器上触发两次

转载 作者:IT王子 更新时间:2023-10-29 03:37:10 28 4
gpt4 key购买 nike

我有一个非常简单的测试应用程序,只是为了玩转 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" />

但是,每次我在模拟器中运行时按下一个键(屏幕键盘或物理键盘,按下暂停以启用后者)它会增加计数器两次,在 中显示两行文本 block 。我尝试过的一切都表明该事件确实触发了两次,我不知道为什么。我已验证它仅被订阅一次 - 如果我在 MainPage 构造函数中取消订阅,当文本更改时(对文本 block )根本不会发生任何事情。

我已经在常规 Silverlight 应用程序中尝试过等效代码,但并没有出现。我目前没有实体手机来重现这一点。我没有发现任何记录表明这是 Windows Phone 7 中的已知问题。

任何人都可以解释我做错了什么,或者我应该将此报告为错误吗?

编辑:为了减少出现两个文本控件的可能性,我尝试完全删除 TextBlock,并将 TextBoxChanged 方法更改为只是递增计数器。然后我在模拟器中运行,输入 10 个字母,然后 然后counter++; 行上放置一个断点(只是为了消除任何闯入调试器的可能性引起问题)- 它显示 counter 为 20。

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

最佳答案

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

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

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

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

关于c# - TextBox.TextChanged 事件在 Windows Phone 7 模拟器上触发两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3438806/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com