Нет никаких причин, по которым установка высоты, а затем привязка к каждой стороне (с установкой стыковки в ноль) не должны работать.
Однако я заметил ошибку в логике предоставленного вами кода. У вас есть:
canvas21.Size = new System.Drawing.Size(this.ClientSize.Width, this.ClientSize.Height - this.Top - 15);
Когда это должно быть на самом деле:
canvas21.Size = new System.Drawing.Size(this.ClientSize.Width, this.ClientSize.Height - this.canvas21.Top - 15);
Вы просто взяли верхнюю часть формы, а не верхнюю часть canvas21, а это то, что вам нужно.
Кажется, это именно то, что вы хотите, по крайней мере, с моей точки зрения. Если это не совсем работает, это просто не меняет размер для вас или он изменяет размер до неправильного?