PDA

View Full Version : برگردان یک StoryBoard به عقب



رضا عربلو
شنبه 28 دی 1387, 17:36 عصر
من برای یک کنترل ام یک StoryBoard به شکل زیر تعریف کرده ام:


<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<ContentPresenter/>
<ControlTemplate.Triggers>
<EventTrigger RoutedEvent="Button.MouseEnter">
<BeginStoryboard Name="D1">
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Width" From="72" To="128" Duration="0:0:0.5" SpeedRatio="6"/>
<DoubleAnimation Storyboard.TargetProperty="Height" From="72" To="128" Duration="0:0:0.5" SpeedRatio="6"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="Button.MouseLeave">
<StopStoryboard BeginStoryboardName="D1"/>
</EventTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>

حالا مشکل این است که هنگامیکه StopStoryboard اجرا مي شود بلافاصله اندازه کنترلم به مقدار اوریجینالش بر می گردد در حالیکه می خواهم این برگشت به عقب بصورت انمیشن به عقب انجام شود. در ضمن نمی توانم از یک StoryBoard دیگر در <EventTrigger RoutedEvent="Button.MouseLeave"> استفاده کرد چرا که ممکن است اونت MouseLeave در وسط اجرای انمیشن مربوط به MouseEnter اتفاق بیافتد.
چه راه حلی پیشنهاد می کنید؟

Mahdi.Kiani
شنبه 28 دی 1387, 17:57 عصر
خاصیت AutoReverse را برابر true بگذارید.
در ضمن، لطفا سوالاتی را که مطرح می کنید، اگر به جواب رسیدند، حل شده اعلام کنید در غیر این صورت تاپیک ها را ادامه دهید تا به یک نتیجه مشخص برسند تا در مراجعات بعدی سایر کاربران این سوالات و جواب ها مفید واقع شوند.
موفق باشید.

رضا عربلو
شنبه 28 دی 1387, 18:43 عصر
ضمن تشکر از حسن توجه تان.
اگر خاصیت AutoReverse را True قرار دهم در همان اونت MouseEnter انیمشن ام بعد از تکمیل به عقب بر می گردد در حالیکه می خواهم این برگشت به عقب در اونت MouseLeave (از وصیعت فعلی width , Height) اتفاق بیافتد

Mahdi.Kiani
شنبه 28 دی 1387, 19:51 عصر
من دقیق متوجه نمیشم که چیکار می خواهید بکنید. اگر واضح تر بگید شاید بتونم بهتر کمکتون کنم.



در ضمن نمی توانم از یک StoryBoard دیگر در <EventTrigger RoutedEvent="Button.MouseLeave"> استفاده کرد چرا که ممکن است اونت MouseLeave در وسط اجرای انمیشن مربوط به MouseEnter اتفاق بیافتد.


خوب چه ایرادی دارد؟ در این صورت انیمیشن اول متوقف و انمیشن دوم شروع می شود که طبیعی هم می باشد.
موفق باشید.

رضا عربلو
شنبه 28 دی 1387, 22:29 عصر
ضمن تشکر.
می خواهم هنگامیکه ماوس بر روی یکی از کنترل هایم رفت یک StoryBoard شروع شود مثلاً اندازه آن بزرگ شود و هنگامیکه ماوس از روی کنترل ام به بیرون رفت Storyboard ام بصورت معکوس انجام شود. دقت داشته باشید که اونت MouseLeave ممکن است زمانی اتفاق بیافتد که هنوز StoryBoard اولم کامل نشده باشد در اینصورت نمی توانم یک StoryBoard دیگر در اونت MouseLeave بصورت عکس StoryBoard اول تعریف کنم زیرا باعث پرش در انیمیشن ام می شود.


<EventTrigger RoutedEvent="Button.MouseEnter">
<BeginStoryboard Name="D1">
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Width" From="72" To="128" Duration="0:0:0.5" SpeedRatio="6"/>
<DoubleAnimation Storyboard.TargetProperty="Height" From="72" To="128" Duration="0:0:0.5" SpeedRatio="6"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="Button.MouseLeave">
<DoubleAnimation Storyboard.TargetProperty="Width" From="128" To="72" Duration="0:0:0.5" SpeedRatio="6"/>
<DoubleAnimation Storyboard.TargetProperty="Height" From="128" To="72" Duration="0:0:0.5" SpeedRatio="6"/>
</EventTrigger>

Mahdi.Kiani
شنبه 28 دی 1387, 23:39 عصر
دلیل این پرش این نیست که برای MouseLeave هم storyboard تعریف کردید.
دلیلش اینه که هر دو مقدار width و height را ست می کنید.
این کد را امتحان کنید:


<Button Content="test" HorizontalAlignment="Center" Width="40" VerticalAlignment="Center">
<Button.Triggers>
<EventTrigger RoutedEvent="Button.MouseEnter">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Width" To="100" Duration="0:0:0.5" />
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
<EventTrigger RoutedEvent="Button.MouseLeave">
<EventTrigger.Actions>
<BeginStoryboard HandoffBehavior="Compose">
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Width" To="40" Duration="0:0:0.5"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>

</Button.Triggers>
</Button>

رضا عربلو
دوشنبه 30 دی 1387, 18:18 عصر
با تشکر.
مشکل پرش با کمک شما حل شد.
ضمناً چگونه می توانم موضوع را حل شده بنمایم؟ جایی دکمه ای حل شده نمی بینم!

Mahdi.Kiani
جمعه 25 بهمن 1387, 21:58 عصر
ضمناً چگونه می توانم موضوع را حل شده بنمایم؟ جایی دکمه ای حل شده نمی بینم!

با به روز رسانی شدن سایت به نسخه جدید VB این قابلیت موقتا از بین رفته. دوستان من در بخش مدیریت در تلاش هستند تا سریغتر این موضوع را حل کنند.
پیروز باشید