Я довольно долго искал способ указать элементу управления WPF (или окну) сохранить определенное соотношение сторон.
- Для
Window
я нашел это решение, которое работает довольно хорошо.Но поскольку он использует Win32 API и дескрипторы окон, он не работает ни для каких WPF Control
s (поскольку, насколько мне известно, в WPF только само окно имеет дескриптор) - Для
Control
обычнополучает совет поместить Control
в ViewBox
, но я не хочу масштабировать свои элементы управления, я хочу, чтобы они меняли размер (и сохраняли любую ширину границы или размер шрифта). - Other "Решения "для
Control
включают в себя любую форму привязки Width
к ActualHeight
или Height
к ActualWidth
, или использование события SizeChanged
, но это приводит к сильному мерцанию при изменении размера, и этоне очень надежныйВ случае привязки Width
к ActualHeight
вы не можете изменить размер только Width
(путем перетаскивания правой границы), потому что ActualHeight
не изменяется.В случае события становится сложно, когда ширина и высота изменяются одновременно, тогда вам придется изменить размер внутри события SizeChanged
... и я упоминал о мерцании?
После долгих чтений и поисков я пришел к выводу, что лучший способ заставить любой элемент управления сохранять определенное соотношение сторон - это делать это внутри функций Measure
и Arrange
.
Я нашел это решение, которое создает элемент управления Decorator
с переопределенными функциями Measure
и Measure
, но это будет означать, что любой элемент управления, который должен сохранять соотношение сторон, внутри собственного Decorator
.Я мог бы жить с этим, если бы мне пришлось, но мне интересно, есть ли лучший способ сделать это.
Итак, вот мой вопрос.Можно ли создать присоединенное свойство Ratio
и присоединенное свойство KeepRatio
и каким-либо образом переопределить функции Measure
и Arrange
рассматриваемых элементов управления в обратных вызовах OnKeepRatioChanged
и RatioChanged
присоединенных свойств?