2012-06-07 36 views
2

我在Windows手机市场上发布了一个应用程序,我试图移植到Win 8.我正在使用Windows 8 Release PreviewVisual Studio Express RC 2012 for Win 8,代码为C#-XAML在C#中为Win 8 Metro应用程序举办Button事件

我已经创建了一个自定义的6x7日历。前7个按钮放入第一个StackPanel,下一个放到另一个面板中等等。所以有6个按钮可以容纳42个按钮。所有这些StackPanel被放置在Grid中以便于定位。

每个按钮都与名为OnLongPress的Holding EventHandler相关联。所以我面临的问题是当按下按钮时,OnLongPress函数被调用两次。在调试时,我发现第一次,Holding stateStarted,下次调用时,Holding state ID为Completed。我无法弄清楚为什么它被调用两次。

是因为事件冒泡吗? :(

private void OnLongPress(object sender, HoldingRoutedEventArgs e) 
    { 

      Button butClicked = (Button)sender; 
      int iNumClicked = Convert.ToInt32(butClicked.Content.ToString()); 

      CycleManager pCycMan = CycleManager.Instance; 

      string iVal, jVal; 
      int iRow, jCol; 
      string butName = butClicked.Name; 
      iVal = butName.Substring(1, 1); 
      jVal = butName.Substring(2, 1); 
      iRow = Convert.ToInt32(iVal); 
      jCol = Convert.ToInt32(jVal); 

      DateTime dtSelDate = new DateTime(m_yearBuffer[iRow, jCol], m_monthBuffer[iRow, jCol], iNumClicked); 

      int trackingStatus = pCycMan.IsDateOkForHistory(dtSelDate); 
      // setting or resetting few colors based on few checks 
    } 

这将是有益的,如果有人能提供一些线索,因为我是新来赢得8开发。

+0

您在哪里将“OnLongPress”处理程序分配给Holding事件,XAML中还是代码中或两者中?如果在代码后面,在构造函数或任何其他事件处理程序中?显示事件处理程序分配代码 – nkchandra

+0

@nkchandra处理程序在xaml中分配。

回答

6

我已经解决了被称为两次,一次是在处理状态的问题举行活动启动而一旦通过,包括以下检查完成。我仍然不知道这是否是正确的方法。

if (e.HoldingState == Windows.UI.Input.HoldingState.Started) 
+0

private void OnLongPress(object sender,HoldingRoutedEventArgs e) {System.Diagnostics.Debug.WriteLine(“OnLongPress”); if(e.HoldingState == Windows.UI.Input.HoldingState.Started){ mKeyBoard.onKeyPress(sender); } else {System.Diagnostics.Debug.WriteLine(“completed”+ Windows.UI.Input.HoldingState。完成);}我用这种方法实现了holdind按钮mkeyboard.onkeyPress(sender)方法在后台执行迭代明智如何在此方法中实现asynctask? – Narasimha

1

如果你只是想保持状态完成时,事件只启动一次或取消,尝试使用RightTapped

举行旨在用于信息用户界面,但对于显示上下文菜单等交互,您应该使用RightTapped来代替。您可能首先处理Holding,以显示菜单将出现的提示,但要显示菜单本身,请使用RightTapped处理程序。有关如何在您的应用设计中使用保持交互的更多信息,请参阅触摸交互设计或常见用户交互指南。

http://msdn.microsoft.com/en-us/library/windows.ui.xaml.uielement.holding.aspx

RightTapped用于处理来自保留在一个地方一定量的时间的动作的触摸动作的结果。如果是触摸动作,则来自同一元素的保持事件始终在此之前,但在触摸点释放之前,RightTapped不会触发。如果指针被按下的时间太短,Tapped会触发而不是Hold,或者如果Hold行为以HoldingState结束为Cancelled,则RightTapped不会触发。

相关问题