Cresciuto nelle giovanili del Bayern Monaco, Wagner ha fatto il suo esordio tra i professionisti il 21 luglio 2007, in una partita di DFL Ligapokal vinta per 4-1 sul campo del Werder Brema, subentrando a Franck Ribéry all'81º minuto di gioco. Quattro giorni più tardi, nel successivo turno di coppa, ha realizzato il suo primo gol con la maglia dei bavaresi, nella vittoria per 2-0 contro lo Stoccarda. L'11 agosto seguente ha debuttato anche in Bundesliga, nel match vinto per 3-0 contro l'Hansa Rostock all'Allianz Arena, subentrando a Miroslav Klose all'87º minuto di gioco.
Il 10 giugno 2008 è stato acquistato dal Duisburg, squadra in cui ha militato fino al 2010. Il 31 gennaio 2010 è stato acquistato per due milioni di euro dal Werder Brema, con cui ha firmato un contratto quadriennale. In totale con la maglia biancoverde ha disputato 36 partite tra campionato e coppe, segnando cinque gol. Viene successivamente prestato al Kaiserslautern per la stagione 2011-2012 e dopo il ritorno alla base viene venduto per 250.000 euro all’Hertha BSC. Qui vi rimane sino alla stagione 2015-2016, venendo venduto successivamente dapprima all’SV Darmstadt 98 e poi all’TSG Hoffenheim.
Dopo 10 anni, precisamente nel mercato di gennaio della stagione 2017-2018, torna al Bayern Monaco, squadra che lo ha lanciato nel grande calcio andando a fare la riserva a Robert Lewandowski; sceglie di indossare la maglia numero 2, pur essendo un attaccante.[1]
Va di nuovo a segno nelle due sfide giocate dalla squadra nell'ottobre 2017 contro l'Irlanda del Nord e l'Azerbaigian vinte rispettivamente per 1-3[5] e 5-1.[6] Gioca altre 3 partite con la rappresentativa prima di lasciare la Nazionale a seguito della mancata convocazione da parte del c.t. tedesco Joachim Löw ai Mondiali di Russia 2018 il 17 maggio dello stesso anno.[7][8]