Я решил пойти со следующим:
double xpos = Canvas.GetLeft(curField.assocGrid);
double ypos = Canvas.GetTop(curField.assocGrid);
double width = curField.assocGrid.Width;
double height = curField.assocGrid.Height;
TextBlock tmp = new TextBlock {
Text = curField.FieldName,
Foreground = new SolidColorBrush(Colors.Red),
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center,
FontSize = 30
};
Grid grd = new Grid();
grd.Children.Add(tmp);
Viewbox vb = new Viewbox();
vb.Child = grd;
vb.Width = width;
vb.Height = height;
cvsCenterPane.Children.Add(vb);
Canvas.SetLeft(vb, xpos);
Canvas.SetTop(vb, ypos);
curField.scaleViewbox = vb;
SelectedFields.Add(curField);
Сначала оберните текстовый блок в сетку, а затем оберните получившуюся сетку в окне просмотра.Мы получаем начальную шкалу 1: 1.Затем, изменив размеры окна просмотра, мы можем получить желаемую результирующую заливку.Единственное, что я хотел бы сделать, но не могу найти способ, это центрировать результирующий текст внутри масштабированного окна просмотра.Прямо сейчас он выровнен по левому краю, даже если в окне просмотра есть место слева.Я не уверен, в чем причина этого.