Не получается получить сенсорный ввод от TouchPanel в Windows Phone 7 - PullRequest
0 голосов
/ 29 января 2011

Я начал новый проект в Visual Studio и пытался использовать статический класс TouchPanel для получения ввода. Я включил жест «Касание» через свойство EnabledGestures, однако при касании экрана жест не регистрируется (т. Е. TouchPanel.IsGestureAvailable возвращает false).

Другие вещи, такие как Mouse.GetState (). LeftButton == ButtonState.Pressed, никогда не подтверждаются, хотя в моем предыдущем проекте (который был основан на примере проекта Microsoft) он всегда работал без проблем.

У кого-нибудь есть идеи, почему я не могу получить какую-либо информацию от устройства?

1 Ответ

1 голос
/ 29 января 2011

Вот как я это настроил - в конструкторе страниц я установил тип жеста:

// Constructor
public MainPage()
{
    InitializeComponent();
    TouchPanel.EnabledGestures = GestureType.Tap;
}

Затем в разметке XAML для основной сетки я связываю ее с обработчиком событий ManipulationCompleted:

<Grid ManipulationCompleted="LayoutRoot_ManipulationCompleted" x:Name="LayoutRoot" Background="Transparent">
</Grid>

Затем в том же обработчике событий:

private void LayoutRoot_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e)
{
    if (TouchPanel.IsGestureAvailable)
    {
        if (TouchPanel.ReadGesture().GestureType == GestureType.Tap)
        {
            Debug.WriteLine("A");
        }
    }
}

У меня работает в проекте Silverlight. В XNA вы должны добавить типы жестов также в конструктор:

public Game1()
{
    graphics = new GraphicsDeviceManager(this);

    TargetElapsedTime = TimeSpan.FromTicks(333333);
    TouchPanel.EnabledGestures = GestureType.Tap;
}

Тогда в методе Update у вас будет такая же проверка:

protected override void Update(GameTime gameTime)
{
    // Allows the game to exit
    if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
        this.Exit();

    if (TouchPanel.IsGestureAvailable)
    {
        if (TouchPanel.ReadGesture().GestureType == GestureType.Tap)
        {
            Debug.WriteLine("A");
        }
    }

    // TODO: Add your update logic here

    base.Update(gameTime);
}
...