|
سلام ، آیا امکانش هست که در wpf یک مسیری رسم کرد و با ایجاد یک انیمشن کاری کرد که آبجکت مورد نظر (مثلا یک Rectangle) این مسیر را طی کند؟
بله خوشبختانه امکانش فراهم است. می توانید از MatrixAnimationUsingPath برای این منظور استفاده کنید. در زیر یک مثال ساده رو میتوانید ببینید:
<Button MinWidth="100" Content="A Button">
<Button.RenderTransform>
<MatrixTransform x:Name="ButtonMatrixTransform">
<MatrixTransform.Matrix >
<Matrix />
</MatrixTransform.Matrix>
</MatrixTransform>
</Button.RenderTransform>
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Loaded">
<BeginStoryboard>
<Storyboard>
<MatrixAnimationUsingPath
Storyboard.TargetName="ButtonMatrixTransform"
Storyboard.TargetProperty="Matrix"
DoesRotateWithTangent="True"
Duration="0:0:5"
RepeatBehavior="Forever" >
<MatrixAnimationUsingPath.PathGeometry>
<PathGeometry
Figures="M 10,100 C 35,0 135,0 160,100 180,190 285,200 310,100"
PresentationOptions:Freeze="True" />
</MatrixAnimationUsingPath.PathGeometry>
</MatrixAnimationUsingPath>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
به قسمت Storyboard توجه کنید؛ از یک کلاس به نام MatrixAnimationUsingPath استفاده شده است که در خصوصیت PathGeometry شکل مورد نظر (مسیر مورد نظر) خود را می توانید بدهید.
حالا XAML برای اجرای انیمیشن از مسیر شما استفاده می کند. این روش برای انیمیشن های خیلی پیچیده بسیار کاربرد دارد.
بروز رسانی:
اگر دقت کرده باشید یک خصوصیت به نام PresentationOptions:Freeze="True" در کدها می بینید؛ این خصوصیت در صورتی وجود دارد که از فضای نام mc:Ignorable="PresentationOptions" استفاده کنید.
البته این خصوصیت در هر Container ای که تنظیم شود، باعث می شود خاصیت IsFrozen فرزندان برابر true شود.
با اینکار به WPF می گویید که شکلتان تغییر نخواهد کرد. به این ترتیب کارایی برنامه بالا می رود.
منبع
موفق باشید
ممنون از جوابی که دادین ، بدون PresentationOptions:Freeze="True" جواب داد ، همچین گزینه ای توی خصوصیات PathGeometry نیست.
حق با شماست، من پستم رو بروز رسانی کردم
مرسی ،جواب داد . حالا انجام این کار با Blend : روی Path که دارید کلیک راست کنید از زیرمنوی Path، گزینه Convert To Motion Path رو بزنید. بعد در پنجره باز شده، شی خود را انتخاب کنید. حالا Blend خودش یک انیمیشن درست میکنه و شی رو به ابتدای مسیر میبره.