在Win 8 Metro App的C#中举行Button事件

alf*_*fah 2 c# windows-8 windows-runtime visual-studio-2012

我在Windows手机市场上发布了一个应用程序,我正在尝试移植到Win 8.我正在使用Windows 8 Release PreviewVisual Studio Express RC 2012 for Win 8,代码是C#-XAML.

我创建了一个自定义的6x7日历.前7个按钮放入第一个StackPanel,下一个放入另一个面板,依此类推.所以有6个StackPanels按住42个按钮.所有这些StackPanel都被放入一个Grid便于定位.

每个按钮都与Holding名为OnLongPress 的EventHandler 相关联.所以我面临的问题是当按下一个按钮时,OnLongPress函数被调用两次.在调试时,我发现第一次,Holding stateStarted和下次调用时,Holding stateid 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
    }
Run Code Online (Sandbox Code Playgroud)

如果有人因为我是Win 8 dev的新手而有所帮助,那将会很有帮助.

alf*_*fah 6

我已经解决了两次调用持有事件的问题,一旦启动处理状态,一旦完成,包括以下检查.我还不确定这是不是正确的方法.

if (e.HoldingState == Windows.UI.Input.HoldingState.Started)
Run Code Online (Sandbox Code Playgroud)