Рядом с Bounds
или Frame
(упомянутым @Krumelur) в вашем коде есть проблема .NET.
RectangleF
- это тип значения (структура), а не ссылочный тип. Вы не можете изменить их свойства / поля в .NET без создания нового экземпляра (прямо или косвенно);
т.е. получатель свойства для Bounds
будет всегда возвращать новый экземпляр. Таким образом, вы назначаете 30 для экземпляра, отличного от того, который используется Subviews[0]
.
Доказательство:
Console.WriteLine (Object.ReferenceEquals (this.Subviews[0].Bounds,
this.Subviews[0].Bounds)); // prints 'False'
Итак, что вам нужно сделать в таком случае:
var bounds = this.Subviews[0].Bounds;
bounds.X = 30.0f;
this.Subviews[0].Bounds = bounds;
Таким образом, новый экземпляр RectangleF
(struct) возвращается обратно свойству Bounds
(с новым заданным значением).