我是初学者,我正在为Wndows Phone 7创建一个应用程序。
你必须知道的第一件事是我的代码在我第一次加载页面时效果很好(从菜单到ConversationPage,菜单包含一个对话列表)。然后,如果我使用硬键返回菜单页面,然后单击同一个对话再次加载相同的对话页面,则问题就会出现。
基本上,我有一个名为MessageBoxMessage的文本框,以及applicationBar中的SendButton。
我想要的是:当我单击SendButton时,它会查看MessageBoxMessage.Text并在PostToWeb函数中发送该值。
问题:当我重新加载页面时,在框中写一些内容并单击SendButton,MessageBoxMessage.Text会神奇地更改为“”或“新消息”。
我在MessageBoxMessage_TextChanged事件和SendButton_Click事件的开头引入了一个断点,其值来自“blablabla”(最近时间MessageBoxMessage_TextChanged已触发)到“”或“新消息”(当SendButton_Click触发时)。
我无法理解为什么......我还有另一个级联的问题所以我想这是一个很大的初学者问题...... (顺便说一句,我已经检查过,事件只定义了一次)
对不起我的英文,我希望你能帮忙:) 非常感谢
private void MessageBoxMessage_GotFocus(object sender, RoutedEventArgs e)
{
MessageBoxMessageHasFocus = true;
if (MessageBoxMessage.Text == "new message")
{
MessageBoxMessage.Text = "";
if (hasPictureAttached == true)
{ SendButton.IsEnabled = true; }
else
{ SendButton.IsEnabled = false; }
}
else if (MessageBoxMessage.Text == "")
{
if (hasPictureAttached == true)
{ SendButton.IsEnabled = true; }
else
{ SendButton.IsEnabled = false; }
}
else
{
SendButton.IsEnabled = true;
}
}
private void MessageBoxMessage_LostFocus(object sender, RoutedEventArgs e)
{
MessageBoxMessageHasFocus = false;
if (MessageBoxMessage.Text == "")
{
MessageBoxMessage.Text = "new message";
if (hasPictureAttached == true)
{ SendButton.IsEnabled = true; }
else
{ SendButton.IsEnabled = false; }
}
else if (MessageBoxMessage.Text == "new message")
{
if (hasPictureAttached == true)
{ SendButton.IsEnabled = true; }
else
{ SendButton.IsEnabled = false; }
}
else
{
SendButton.IsEnabled = true;
}
}
int MessageBoxMessageTextChangedCounter = 0;
private void MessageBoxMessage_TextChanged(object sender, TextChangedEventArgs e)
{
if (MessageBoxMessageTextChangedCounter == 0)
{
if ((MessageBoxMessage.Text != "" && MessageBoxMessage.Text != "new message") || hasPictureAttached == true)
{
SendButton.IsEnabled = true;
}
else { SendButton.IsEnabled = false; }
MessageBoxMessageTextChangedCounter = 1;
return;
}
else
{
MessageBoxMessageTextChangedCounter = 0;
}
if (MessageBoxMessage.Text != "" && MessageBoxMessage.Text != "new message")
{
MessageString = MessageBoxMessage.Text;
}
}
private void SendButton_Click(object sender, EventArgs e)
{
if (MessageBoxMessage.Text == "new message" && hasPictureAttached == true)
{ MessageBoxMessage.Text = "";}
SendButton.IsEnabled = false;
if (hasPictureAttached == true)
{
//MessageString = MessageBoxMessage.Text;
GetPictureUrl();
hasPictureAttached = false;
}
else
{
//MessageString = MessageBoxMessage.Text;
POSTmessage();
}
if (MessageBoxMessageHasFocus == true)
{
MessageBoxMessage.Text = "";
MessageBoxMessage.SetValue(TextBox.TextProperty, "");
}
else
{
MessageBoxMessage.Text = "new message";
MessageBoxMessage.SetValue(TextBox.TextProperty, "new message");
}
}
以下是XAML
<TextBox x:Name="MessageBoxMessage" Margin="-12,0,-12,12" TextWrapping="Wrap" Foreground="Gray" TextChanged="MessageBoxMessage_TextChanged" LostFocus="MessageBoxMessage_LostFocus" GotFocus="MessageBoxMessage_GotFocus">
<TextBox.InputScope>
<InputScope>
<InputScopeName NameValue="Chat" />
</InputScope>
</TextBox.InputScope>
</TextBox>
答案 0 :(得分:1)
(感谢您通过电子邮件提供完整版。这使调试变得更加容易)......
事件处理程序存在一些问题,但 Magic 值的实际原因是,每次导航到ConversationPage时,都会创建一个新的ConversationPage对象,但是前一个(s)未被销毁或重复使用。
如果您不止一次离开ConversationPage,您实际上会为所创建的ConversationPage对象的每个实例点击一次SendButton_Click 。
原因是你的SendButton对象是一个单独的,跨页面共享,因此连接到它的每个页面都有自己的click事件。页面与静态SendButton对象之间存在该链接意味着永远不会删除“对话”页面(您可以使用皮带!)。
您需要删除SendButton处理程序以响应OnNavigatedFrom
页面事件,如下所示:
SendButton.Click -= SendButton_Click;
这将删除当前页面的处理程序并允许它死于优雅的死亡。