ScaleTransform更改使用故事板后不起作用(ScaleTransform change Not work after Use Storyboard)

编程入门 行业动态 更新时间:2024-10-19 00:30:58
ScaleTransform更改使用故事板后不起作用(ScaleTransform change Not work after Use Storyboard)

我使用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

更多推荐

本文发布于:2023-08-07 06:30:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1463071.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:不起作用   故事   ScaleTransform   Storyboard   work

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!