我使用Storyboard更改ScaleTransform并且工作正常,但是在更改后ScaleTransform不起作用,
sample:scaleTransform.ScaleX = 1使用后Storyboard:scaleTransform.ScaleX = 2当我的代码scaleTransform.ScaleX + = 1时更改; 但是scaleTransform.ScaleX = 2,
private Storyboard _story = new Storyboard(); private void CreateAnimation(double x, double y, TimeSpan delay) { var stScaleX = new DoubleAnimation(scaleTransform.ScaleX, x, delay); var stScaleY = new DoubleAnimation(scaleTransform.ScaleY, y, delay); stScaleX.SetValue(Storyboard.TargetProperty, mainCanvas); stScaleX.SetValue(Storyboard.TargetPropertyProperty, new PropertyPath("LayoutTransform.Children[0].ScaleX")); stScaleY.SetValue(Storyboard.TargetNameProperty, mainCanvas.Name); stScaleY.SetValue(Storyboard.TargetPropertyProperty, new PropertyPath("LayoutTransform.Children[0].ScaleY")); _story.Children.Add(stScaleY); _story.Children.Add(stScaleX); mainCanvas.Resources.Clear(); _story.Changed += St_Changed; _story.Completed += St_Completed; _story.Begin(mainCanvas); } private void St_Completed(object sender, EventArgs e) { _story.Changed -= St_Changed; _story.Completed -= St_Completed; var newXy = new Point(_scalePoint.X, _scalePoint.Y); scrollViewer.ScrollToHorizontalOffset(newXy.X); scrollViewer.ScrollToVerticalOffset(newXy.Y); var zs = GetScaleTransform(mainCanvas); ZoomLevel = zs.ScaleX; _story.Stop(); _story.Remove(); mainCanvas.Resources.Clear(); } private void St_Changed(object sender, EventArgs e) { var newXy = new Point(_scalePoint.X, _scalePoint.Y); scrollViewer.ScrollToHorizontalOffset(newXy.X); scrollViewer.ScrollToVerticalOffset(newXy.Y); } private void mainCanvas_MouseWheel(object sender, MouseWheelEventArgs e) { var st = GetScaleTransform(mainCanvas); var zoom = e.Delta > 0 ? .6 : -.6; if (!(e.Delta > 0) && (st.ScaleX < .4 || st.ScaleY < .4)) return; if (st.ScaleX <= 1 && zoom < 0) return; var relativeOnImage = e.GetPosition(mainCanvas); var relativeOnScreen = e.GetPosition(Grid1); scaleTransform.ScaleX = st.ScaleX+zoom; scaleTransform.ScaleY = st.ScaleY+ zoom; if (st.ScaleX < 1) st.ScaleX = 1; if (st.ScaleY < 1) st.ScaleY = 1; var newSizeX = Grid1.ActualWidth*st.ScaleX; newSizeX = ((newSizeX*relativeOnImage.X)/ Grid1.ActualWidth)- relativeOnScreen.X; var newSizeY = Grid1.ActualHeight * st.ScaleY; newSizeY = ((newSizeY*relativeOnImage.Y)/ Grid1.ActualHeight)- relativeOnScreen.Y; scrollViewer.ScrollToHorizontalOffset(newSizeX); scrollViewer.ScrollToVerticalOffset(newSizeY); IsZooming = st.ScaleX > 1 || st.ScaleY > 1; }I change ScaleTransform with Storyboard and work fine, but after change ScaleTransform not work,
sample: scaleTransform.ScaleX=1 after use Storyboard: scaleTransform.ScaleX=2 when change in my code scaleTransform.ScaleX += 1; but scaleTransform.ScaleX=2,
private Storyboard _story = new Storyboard(); private void CreateAnimation(double x, double y, TimeSpan delay) { var stScaleX = new DoubleAnimation(scaleTransform.ScaleX, x, delay); var stScaleY = new DoubleAnimation(scaleTransform.ScaleY, y, delay); stScaleX.SetValue(Storyboard.TargetProperty, mainCanvas); stScaleX.SetValue(Storyboard.TargetPropertyProperty, new PropertyPath("LayoutTransform.Children[0].ScaleX")); stScaleY.SetValue(Storyboard.TargetNameProperty, mainCanvas.Name); stScaleY.SetValue(Storyboard.TargetPropertyProperty, new PropertyPath("LayoutTransform.Children[0].ScaleY")); _story.Children.Add(stScaleY); _story.Children.Add(stScaleX); mainCanvas.Resources.Clear(); _story.Changed += St_Changed; _story.Completed += St_Completed; _story.Begin(mainCanvas); } private void St_Completed(object sender, EventArgs e) { _story.Changed -= St_Changed; _story.Completed -= St_Completed; var newXy = new Point(_scalePoint.X, _scalePoint.Y); scrollViewer.ScrollToHorizontalOffset(newXy.X); scrollViewer.ScrollToVerticalOffset(newXy.Y); var zs = GetScaleTransform(mainCanvas); ZoomLevel = zs.ScaleX; _story.Stop(); _story.Remove(); mainCanvas.Resources.Clear(); } private void St_Changed(object sender, EventArgs e) { var newXy = new Point(_scalePoint.X, _scalePoint.Y); scrollViewer.ScrollToHorizontalOffset(newXy.X); scrollViewer.ScrollToVerticalOffset(newXy.Y); } private void mainCanvas_MouseWheel(object sender, MouseWheelEventArgs e) { var st = GetScaleTransform(mainCanvas); var zoom = e.Delta > 0 ? .6 : -.6; if (!(e.Delta > 0) && (st.ScaleX < .4 || st.ScaleY < .4)) return; if (st.ScaleX <= 1 && zoom < 0) return; var relativeOnImage = e.GetPosition(mainCanvas); var relativeOnScreen = e.GetPosition(Grid1); scaleTransform.ScaleX = st.ScaleX+zoom; scaleTransform.ScaleY = st.ScaleY+ zoom; if (st.ScaleX < 1) st.ScaleX = 1; if (st.ScaleY < 1) st.ScaleY = 1; var newSizeX = Grid1.ActualWidth*st.ScaleX; newSizeX = ((newSizeX*relativeOnImage.X)/ Grid1.ActualWidth)- relativeOnScreen.X; var newSizeY = Grid1.ActualHeight * st.ScaleY; newSizeY = ((newSizeY*relativeOnImage.Y)/ Grid1.ActualHeight)- relativeOnScreen.Y; scrollViewer.ScrollToHorizontalOffset(newSizeX); scrollViewer.ScrollToVerticalOffset(newSizeY); IsZooming = st.ScaleX > 1 || st.ScaleY > 1; }最满意答案
我解雇了,
我改变了我的代码,并且工作了
var oldDataX = scaleTransform.ScaleX; var oldDataY = scaleTransform.ScaleY; scaleTransform.BeginAnimation(ScaleTransform.ScaleXProperty, null); scaleTransform.BeginAnimation(ScaleTransform.ScaleYProperty, null); scaleTransform.ScaleX = oldDataX + zoom; scaleTransform.ScaleY = oldDataY + zoom;了解更多信息 :
https://msdn.microsoft.com/en-us/library/aa970493(v=vs.90).aspx http://www.codeproject.com/Tips/146505/WPF-Storyboard-animation-locks-properties-它-S-ANI
I sloved,
I change my code, and worked
var oldDataX = scaleTransform.ScaleX; var oldDataY = scaleTransform.ScaleY; scaleTransform.BeginAnimation(ScaleTransform.ScaleXProperty, null); scaleTransform.BeginAnimation(ScaleTransform.ScaleYProperty, null); scaleTransform.ScaleX = oldDataX + zoom; scaleTransform.ScaleY = oldDataY + zoom;for more information :
https://msdn.microsoft.com/en-us/library/aa970493(v=vs.90).aspx http://www.codeproject.com/Tips/146505/WPF-Storyboard-animation-locks-properties-it-s-ani
更多推荐
发布评论