The 31-year-old Penner gives the Capitals a potential top-line left wing as they make a push to get into playoff position with 20 games to go in the regular season.
The Capitals announced the deal Tuesday, one day before the NHL's trade deadline.
Penner is set to become a free agent this summer. He signed a one-year, $2 million contract last year.
He has played for the Los Angeles Kings, Edmonton Oilers and Anaheim over nine seasons. This season, he has 13 goals and 19 assists with the Ducks.
The deal returns to the Ducks the fourth-round pick they sent to Washington in the trade for Mathieu Perreault in September.