I’m having the same problem. quick test with following code results in the Back button being registered as pressed briefly when the B button is released.
spriteBatch.Begin();
if (GamePad.GetState(PlayerIndex.One).Buttons.A == ButtonState.Pressed)
{
spriteBatch.DrawString(font, "GamePad A : Pressed", new Vector2(100, 100), Color.White);
}
else
{
spriteBatch.DrawString(font, "GamePad A : ", new Vector2(100, 100), Color.White);
}
if (GamePad.GetState(PlayerIndex.One).Buttons.B == ButtonState.Pressed)
{
spriteBatch.DrawString(font, "GamePad B : Pressed", new Vector2(100, 120), Color.White);
}
else
{
spriteBatch.DrawString(font, "GamePad B : ", new Vector2(100, 120), Color.White);
}
if (GamePad.GetState(PlayerIndex.One).Buttons.X == ButtonState.Pressed)
{
spriteBatch.DrawString(font, "GamePad X : Pressed", new Vector2(100, 140), Color.White);
}
else
{
spriteBatch.DrawString(font, "GamePad X : ", new Vector2(100, 140), Color.White);
}
if (GamePad.GetState(PlayerIndex.One).Buttons.Y == ButtonState.Pressed)
{
spriteBatch.DrawString(font, "GamePad Y : Pressed", new Vector2(100, 160), Color.White);
}
else
{
spriteBatch.DrawString(font, "GamePad Y : ", new Vector2(100, 160), Color.White);
}
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
{
spriteBatch.DrawString(font, "GamePad Back : Pressed", new Vector2(100, 180), Color.White);
}
else
{
spriteBatch.DrawString(font, "GamePad Back : ", new Vector2(100, 180), Color.White);
}
spriteBatch.End();
Saving the previous gamepad state then checking if the previous and current buttonstate of Back button seems to stop the B button triggering Back.
GamePadState gPad, gPadLast;
gPad = GamePad.GetState(PlayerIndex.One);
if (gPad.Buttons.Back == ButtonState.Pressed && gPadLast.Buttons.Back == ButtonState.Pressed)
{
spriteBatch.DrawString(font, "GamePad Back : Pressed", new Vector2(100, 180), Color.White);
}
else
{
spriteBatch.DrawString(font, "GamePad Back : ", new Vector2(100, 180), Color.White);
}
gPadLast = gPad;