通过更改缩放级别调整控件大小时,不会引发FrameworkElement.SizeChanged事件

时间:2018-11-14 11:12:55

标签: c# wpf wpf-controls routed-events

我有一个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,我能够在UI上调整用户控件的大小并接收SizeChanged事件。 但是,当调整大小导致创建新的zoomvalue时,并且一旦在UI上应用了新的zoomValue,我便无法在UI上调整控件的大小,并且不再接收SizeChanged事件。虽然我拖动鼠标来调整大小,但没有。如果我松开鼠标再做一次,我会看到相同的行为。

因此,在一系列鼠标操作序列中,一旦将新的缩放级别应用于控件,我将无法进一步调整控件的大小。如果我释放鼠标并尝试调整大小,则可以,但是只有应用新的缩放后才能这样做。随着内容缩放级别的改变,我无法随意拖动和调整大小。如果禁用ApplyZoom功能,则可以按预期调整控件的大小。 这使我感到,修改比例因子后,控件本身的调整大小无法正常工作。 要连续/平滑地调整控件的大小并使用更新的比例因子呈现内容,需要做什么?

0 个答案:

没有答案