Elias Lindholm and Blake Coleman also scored for Calgary (18-13-7), which has points in 12 of its last 15 games (8-3-4).
''We're on the right track,'' Lindholm said.
It was Weegar's first multipoint game since opening night.
''It feels great. Even better with the two points, obviously,'' said Weegar, who scored a career-high eight goals last season with Florida.
Sheldon Dries and Elias Pettersson scored for Vancouver (16-17-3), which has dropped two straight on the road after winning seven in a row in opposition rinks.
''I don't think our first two periods were good. Especially me. I made too many turnovers, too many simple mistakes,'' Pettersson said. ''Always try to make the hard play, so I've got to definitely be better.''
Jacob Markstrom made 22 stops against his former team to improve to 12-9-4. He is 9-3-1 versus Vancouver with a .921 save percentage.
Markstrom spent seven seasons with the Canucks before signing with Calgary as a free agent in 2020.
At the other end, Spencer Martin had 27 saves. His record slipped to 11-6-1.
''We've been playing great on the road so it's disappointing that we didn't come home with any points on this trip,'' Martin said. ''We're going to have to bounce back and make it really hard to play in Vancouver.''
After a scoreless first period, Calgary surged in front 1:21 into the second when Lindholm kept the puck on a 2-on-1 rush and fired a shot past Martin.
The Flames made it 2-0 on a short-handed goal at 9:32 of the second on a sequence set up by a superb outlet pass from Weegar.
Weegar made it 3-0 at 14:17 when his point shot eluded Martin. And even though it was his first goal, the defenseman's celebration was muted.
''It was a weird play. I honestly thought that it was going to be offside. (Chris Tanev) kept a good puck in and I didn't want to jinx it by over-cellying,'' Weegar said.
He also helped orchestrate Coleman's short-handed goal five minutes earlier, springing Rasmus Andersson, who set up Coleman on a 2-on-1.
''It was a turnover at the blue line. I knew that they were kind of tired. I heard the coaches yelling at them to change, so I hung onto the puck a bit,'' Weegar said. ''I was actually looking for (Coleman) to go for a breakaway. But Ras was yelling at me and I just got it to him.''
Weegar came over to Calgary with Jonathan Huberdeau in the offseason deal that sent Matthew Tkachuk to the Panthers.
''Weegs is the best, man. He's a great guy, great teammate. We joked about it this morning - we thought he was gonna get one and he did,'' Coleman said. ''We're happy for him. He's a big part of our team. It's going to be the first of many. Sometimes it's just funny how it works like that.''
Dries got one back for Vancouver at 15:28 on a strange one, knocking a puck in from waist level after it had fluttered into the air on one side of the net and came down on the other side where Dries was the first to spot it.
The Canucks climbed within one at 4:06 of the third when Pettersson buried a rebound, but Vancouver could not score the tying goal despite pushing hard.
''Sometimes your best players have to be your best players, and I didn't think our best players in that second period were our best players,'' Canucks coach Bruce Boudreau said. ''Consequently when that happens, you get behind the 8-ball.''
Calgary played the second half of the game with 11 forwards after Brett Ritchie left early in the second period after appearing to injure his hand or arm in a collision along the boards.
Vancouver: Hosts the New York Islanders on Tuesday.
Calgary: At the Winnipeg Jets on Tuesday.
AP NHL: https://apnews.com/hub/nhl and https://twitter.com/AP-Sports
Copyright 2023 STATS LLC and Associated Press. Any commercial use or distribution without the express written consent of STATS LLC and Associated Press is strictly prohibited.