Всем привет! Читал вас, теперь зарегился, есть вопрос. Столкнулся с багом, нигде не нашёл похожего. Multibinding выставляет значения после события Loaded. В этом примере используется MatrixAnimationUsingPath(с PointAnimationUsingPath результат аналогичный). Круг должен следовать по черной линии(ну почти, я спешил ) Вместо этого он скачет в левую верхнюю точку из-за того, что Multibinding вызывается после события Loaded(если поставить брейкпоинт в конвертере это видно), а к тому моменту анимация уже забирает "плохой" PathGeometry с невозвращённым значением, которое получается равным точке в нулевых координатах. В связи с этим вопрос. Знает ли кто-нибудь простой обходной способ? Мне необходимо чтобы анимация стартовала при загрузке. Варианты с MouseEnter и прочее не подойдут. Code: | Код | using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.Windows; using System.Windows.Data; namespace WpfApplication1 { public partial class App : Application{}
public class PointConverter : IValueConverter{ public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {return new Point(150, 150);}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture){throw new NotImplementedException();}}
public class PointMultiConverter : IMultiValueConverter{ public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) {return new Point(75, 50);}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture){throw new NotImplementedException();}}}
|
XAML: | Код | <Window x:Class="WpfApplication1.Window1" xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml xmlns:local ="clr-namespace:WpfApplication1" Title="Window1" Height="300" Width="300">
<Canvas Name="MainCanvas" Width="300" Height="300"> <Canvas.Resources> <local:PointConverter x:Key="Con"/> <local:PointMultiConverter x:Key="ConMulti"/>
<PathGeometry x:Key="PathGeom"> <PathFigure StartPoint="0,150"> <LineSegment> <LineSegment.Point> <MultiBinding Converter="{StaticResource ConMulti}"> <Binding ElementName="MainCanvas" Path="ActualWidth"/> <Binding ElementName="MainCanvas" Path="ActualHeight"/> </MultiBinding> </LineSegment.Point> </LineSegment> <LineSegment > <LineSegment.Point> <Binding ElementName="MainCanvas" Path="Width" Converter="{StaticResource Con}"/> </LineSegment.Point> </LineSegment> </PathFigure> </PathGeometry>
<Storyboard x:Key="Ellipse_PathAnim"> <MatrixAnimationUsingPath BeginTime="0:0:0" Storyboard.TargetName="Ellipse_MatrixTransform" Storyboard.TargetProperty="Matrix" DoesRotateWithTangent="True" Duration="0:0:5" RepeatBehavior="Forever" PathGeometry="{StaticResource PathGeom}" > </MatrixAnimationUsingPath> </Storyboard> </Canvas.Resources>
<Path Data="{StaticResource PathGeom}" Stroke="Black"/> <Ellipse Width="20" Fill="Red" Height="20" RenderTransformOrigin="0.5,0.5">
<Ellipse.RenderTransform> <TransformGroup> <MatrixTransform x:Name="Ellipse_MatrixTransform"> <MatrixTransform.Matrix > <Matrix /> </MatrixTransform.Matrix> </MatrixTransform> </TransformGroup> </Ellipse.RenderTransform> <Ellipse.Triggers> <EventTrigger RoutedEvent="Ellipse.Loaded"> <BeginStoryboard Name="AnimStory" Storyboard="{StaticResource Ellipse_PathAnim}"> </BeginStoryboard> </EventTrigger> </Ellipse.Triggers> </Ellipse> </Canvas> </Window>
|
|