Событие FrameworkElement.SizeChanged не возникает при изменении размера элемента управления с изменением уровня масштабирования. - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть пользовательский элемент управления wpf, и я слушаю событие FrameworkElement.SizeChanged.В OnSizeChanged мне нужно пересчитать масштаб и применить обратно к элементу управления.Общая задача состоит в том, чтобы масштабировать содержимое внутри пользовательского элемента управления при изменении его размера.

public class PictureDisplay: Control
{
     public PictureDisplay()
     {
          SizeChanged += OnSizeChanged;
     }
     private void OnSizeChanged(object sender, SizeChangedEventArgs e)
     {
        //Recalculate zoomValue with new control dimensions
        if(zoomvalue changes)
             ApplyZoom(zoomValue);
     }
     private ApplyZoom(double zoomValue)
     {
        ScaleTransform tf = (ScaleTransform)dc._image.LayoutTransform;
        tf.ScaleX = zoomValue;
        tf.ScaleY = zoomValue;
     }
}

Все операции изменения размера не должны приводить к новому zoomValue.Предположим, что я изменил размер по оси X с минимальным смещением, и, скажем, мой собственный расчет zoomValue не создает нового zoomValue, я могу изменить размер пользовательского элемента управления в пользовательском интерфейсе и получать события SizeChanged.Но когда изменение размера приводит к созданию нового значения zoom, и как только я применяю новое zoomValue к пользовательскому интерфейсу, я не могу изменить размер элемента управления в пользовательском интерфейсе и больше не получаю события SizeChanged.Хотя я перетаскиваю мышь, чтобы изменить размер, это не так.Если я отпущу мышь и сделаю это снова, я вижу то же самое поведение.

Таким образом, в одной последовательности операций мыши, после применения нового уровня масштабирования к элементу управления, я не могу изменить размер элемента управления дальше.Если я отпущу мышь и попытаюсь изменить ее размер, я смогу, но только до тех пор, пока не будет применен новый зум.С изменением уровня масштабирования содержимого я не могу перетащить и изменить размер сразу.Если я отключу функцию ApplyZoom, я могу изменить размер элемента управления, как ожидалось.Это дает мне ощущение, что изменение размера самого элемента управления не работает при изменении масштабного коэффициента.Что необходимо сделать для непрерывного / плавного изменения размера элемента управления и рендеринга контента с обновленным масштабным коэффициентом?

...