在Window Phone 8上实现MSDN Basic Camera示例时出错

时间:2014-05-15 09:00:40

标签: c# windows-phone-8

我已经下载了MSDN示例项目,用于了解手机摄像头的使用情况。我正在开发Windows Phone 8应用程序。

启动下载的项目时,一切都很好。

现在我想在我自己的项目中加入一些基础知识。将XAML和XAML.CS复制到我的项目后,我收到以下错误:

  

'GestureEventArgs'是'System.Windows.Input.GestureEventArgs'和'Microsoft.Phone.Controls.GestureEventArgs'之间的模糊引用

这引用了MSDN的以下代码:

    // Provide touch focus in the viewfinder.
    void focus_Tapped(object sender, GestureEventArgs e)
    {
        if (cam != null)
        {
            if (cam.IsFocusAtPointSupported == true)
            {
                try
                {
                    // Determine location of tap.
                    Point tapLocation = e.GetPosition(viewfinderCanvas);

                    // Position focus brackets with estimated offsets.
                    focusBrackets.SetValue(Canvas.LeftProperty, tapLocation.X - 30);
                    focusBrackets.SetValue(Canvas.TopProperty, tapLocation.Y - 28);

                    // Determine focus point.
                    double focusXPercentage = tapLocation.X / viewfinderCanvas.Width;
                    double focusYPercentage = tapLocation.Y / viewfinderCanvas.Height;

                    // Show focus brackets and focus at point
                    focusBrackets.Visibility = Visibility.Visible;
                    cam.FocusAtPoint(focusXPercentage, focusYPercentage);

                    // Write a message to the UI.
                    this.Dispatcher.BeginInvoke(delegate()
                    {
                        txtDebug.Text = String.Format("Camera focusing at point: {0:N2} , {1:N2}", focusXPercentage, focusYPercentage);
                    });
                }
                catch (Exception focusError)
                {
                    // Cannot focus when a capture is in progress.
                    this.Dispatcher.BeginInvoke(delegate()
                    {
                        // Write a message to the UI.
                        txtDebug.Text = focusError.Message;
                        // Hide focus brackets.
                        focusBrackets.Visibility = Visibility.Collapsed;
                    });
                }
            }
            else
            {
                // Write a message to the UI.
                this.Dispatcher.BeginInvoke(delegate()
                {
                    txtDebug.Text = "Camera does not support FocusAtPoint().";
                });
            }
        }
    }

我不明白,这里出了什么问题......有什么帮助吗?

2 个答案:

答案 0 :(得分:2)

您似乎同时使用以下两种语句:

using System.Windows.Input;
using Microsoft.Phone.Controls;

可能会导致冲突,因为上面每个命名空间中都定义了一个不同的GestureEventArgs类。

您可以使用namespace alias来解决此冲突,例如,如果您打算使用GestureEventArgs命名空间中的System.Windows.Input.GestureEventArgs,请添加以下using语句:

using GestureEventArgs = System.Windows.Input.GestureEventArgs;

void focus_Tapped(object sender, GestureEventArgs e)
{
    .......
}

或其他选项使用完全限定的类名:

void focus_Tapped(object sender, System.Windows.Input.GestureEventArgs e)
{
    .......
}

答案 1 :(得分:1)

您可能已在项目中安装了Window Phone Toolkit。

在Windows Phone 7中,Toolkit添加了一个API来管理手势。在Windows Phone 8上,此功能是内置的,因此您有两个具有相同名称的类,并且编译器不知道要使用哪个类。

您应该做的是指示编译器使用哪个类,只需在其前面添加内置API的命名空间(System.Windows.Input):

void focus_Tapped(object sender, System.Windows.Input.GestureEventArgs e)