为 Win 8 Metro 应用的 C# 中的按钮举行活动

本文关键字:按钮 活动 Metro 应用 Win | 更新日期: 2023-09-27 18:36:31

我在Windows Phone市场上有一个已发布的应用程序,我正在尝试将其移植到Win 8。我正在使用Windows 8 Release PreviewVisual Studio Express RC 2012 for Win 8,代码C#-XAML

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

每个按钮都与一个名为OnLongPress的Holding事件处理程序相关联。所以我面临的问题是,当按下一个按钮时,OnLongPress 函数会被调用两次。在调试时,我发现第一次Holding state Started,下次调用它时,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
    }

如果有人能提供一些信息,那将很有帮助,因为我是 Win 8 开发的新手。

为 Win 8 Metro 应用的 C# 中的按钮举行活动

我已经解决了两次调用的问题,一次是处理状态启动,一次是通过包含以下检查完成的。我仍然不确定这是否是正确的方法。

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

如果只想在保持状态完成或取消时仅触发事件一次,请尝试使用 RightTapped

保持适用于信息 UI,但对于显示上下文菜单等交互,应改用RightTapped。可以先处理 Holding 以显示将出现菜单的提示,但要显示菜单本身,请使用 RightTapped 处理程序。有关如何在应用设计中使用保持交互的详细信息,请参阅触摸交互设计或常见用户交互指南。

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

触摸操作的RightTapped是由于处理在一个位置保留一定时间的动作而产生的。如果是触摸操作,则来自同一元素的 Holding 事件始终位于此操作之前,但在释放触摸点之前不会触发RightTapped事件。如果按下指针的时间太短,并且"点击"而不是"按住"触发,或者"保持"操作以"HoldingState"结束为"已取消",则不会触发RightTapped