저는 WPF에 익숙하지 않습니다. 그리고 꽤 많은 연주를 한 후에 마침내 제 컨트롤이 제대로 작동하고 있습니다. 이미지를 표시하는 사각형이 있습니다. 마우스 휠은 ScaleTransform
애니메이션으로 이미지의 크기를 조정하고 마우스를 클릭/끌면 화면에서 이미지가 움직입니다. 문제는 이미지를 위아래로 확대 한 다음 이동하려고하면 자동으로 1 (원본 크기)로 다시 조정됩니다. 크기가 조정될 때 주위를 움직일 방법이 있습니까? 편집 : ScaleTransform 및 TranslateTransform을 TransformGroup으로 설정하려고 시도했지만 여전히 작동하지 않았습니다.TranslateTransform은 ScaleTransform을 취소합니다.
다른 문제는 부모 컨테이너보다 이미지가 큽니다. 범위를 벗어났습니다. 부모 컨테이너에 ClipToBounds = True
을 설정했지만 작동하지 않았습니다.
코드 : 사용자가 제공 한 코드가 매우 긴 때문에 내가 귀하의 경우에 다음 예를 적용하지 않은
private void Window_MouseWheel_1(object sender, MouseWheelEventArgs e)
{
if (e.Delta > 0)
{
ScaleTransform scaleP = new ScaleTransform();
scaleP.CenterX = e.GetPosition(this).X;
scaleP.CenterY = e.GetPosition(this).Y;
rect.RenderTransform = scaleP;
DoubleAnimation dblAnimX = new DoubleAnimation();
dblAnimX.From = scaleXFrom;
dblAnimX.To = scaleXTo + 0.1;
scaleXFrom = scaleXTo +0.1;
scaleXTo += 0.1;
Duration = new Duration(TimeSpan.FromSeconds(0.15));
DoubleAnimation dblAnimY = new DoubleAnimation();
dblAnimY.From = scaleYFrom;
dblAnimY.To = scaleYTo + 0.1;
scaleYFrom = scaleYTo +0.1;
scaleYTo += 0.1;
Duration = new Duration(TimeSpan.FromSeconds(0.15));
scaleP.BeginAnimation(ScaleTransform.ScaleXProperty, dblAnimX);
scaleP.BeginAnimation(ScaleTransform.ScaleYProperty, dblAnimY);
}
else
{
ScaleTransform scaleM = new ScaleTransform();
scaleM.CenterX = e.GetPosition(this).X;
scaleM.CenterY = e.GetPosition(this).Y;
rect.RenderTransform = scaleM;
DoubleAnimation dblAnimX = new DoubleAnimation();
dblAnimX.From = scaleXFrom;
dblAnimX.To = scaleXTo -0.1;
scaleXFrom = scaleXTo -0.1;
scaleXTo -= 0.1;
dblAnimX.Duration = new Duration(TimeSpan.FromSeconds(0.15));
DoubleAnimation dblAnimY = new DoubleAnimation();
dblAnimY.From = scaleYFrom;
dblAnimY.To = scaleYTo - 0.1;
scaleYFrom = scaleYTo -0.1;
scaleYTo -= 0.1;
Duration = new Duration(TimeSpan.FromSeconds(0.15));
scaleM.BeginAnimation(ScaleTransform.ScaleXProperty, dblAnimX);
scaleM.BeginAnimation(ScaleTransform.ScaleYProperty, dblAnimY);
}
}
private void rect_MouseMove_1(object sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)
{
System.Windows.Point p = e.GetPosition(this);
TranslateTransform tt = new TranslateTransform();
tt.X = (p.X - mouseDownX);
tt.Y = (p.Y - mouseDownY);
rect.RenderTransform = tt;
}
}
감사합니다. 이것은 매력처럼 작동했습니다! –