Я думаю, вам нужно реализовать уведомление об изменении свойства. Когда исходные значения ширины и высоты определены и установлены или изменены, вам необходимо уведомить цель об этом изменении. Это позволит вам узнать, как это сделать: Уведомление об изменении .
По сути, вам нужно реализовать INotifyPropertyChanged и вызывать OnPropertyChanged () для каждого свойства при изменении значения
Редактировать 1: Я не следую , Вы используете привязку для высоты и ширины. Это означает, что вы хотите, чтобы эти значения обновлялись во время нормальной работы. Если это не правильно, просто используйте жестко закодированные значения.
Кроме того, ваши значения не соблюдаются, поскольку они устанавливаются в конструкторе, который запускается после инициализации пользовательского интерфейса. Без уведомления об изменениях значения в конструкторе не будут соблюдаться (поэтому они не устанавливаются должным образом при запуске).
Вы можете инициализировать свои значения в их определении, например:
public double Width { get; set; } = 400;
Это значение применяется во время инициализации и должно применяться к исходному макету пользовательского интерфейса во время запуска - однако без уведомления об изменении это становится постоянным c (неизменным) значением.
Однако вам необходимо исправить привязку. Ваша привязка относится к RelativeSource, но привязана к самой себе. Это означает, что вы привязываете ширину элемента управления к себе. Вам необходимо привязаться к источнику данных, используя ElementName = и путь к фактическому элементу данных, например, Path = data.Width. Это приблизительное значение, поскольку вашему коду недостаточно для понимания всей картины. Однако, опять же, без уведомления об изменениях, изменения в data.Width не будут обновляться.
Редактировать 2 : Вы также можете обновить значения «традиционным» способом. То есть используйте имя элемента управления и имя свойства и установите значение в коде. При этом Привязка будет игнорироваться.