Как вызвать Storyboard в xaml.cs?

224
18 июля 2018, 22:50

Как вызвать анимацию в xaml.cs ?

Полазил по разным форумам, нашел такой вариант:

BeginStoryboard sb = this.FindResource("x:Key_Название") as BeginStoryboard;
sb.Storyboard.Begin();

В xaml.cs не могу вызвать класс Storyboard, только есть BeginStoryboard. Решил дописать до Storyboard -> BeginStoryboard -> не получилось, компилятор пишет "namespace couldnot be found". Анимация эта у меня прописана в отдельном файле Effect.xaml; Пробовал перенести сразу ее в файл MainWindow, там где и находится объект, который работает с ней.

Effect.xaml:

<BeginStoryboard x:Key="EllipseInite">
        <Storyboard>
            <DoubleAnimation x:Name="EllipseFiniteAnim" To="15" Duration="00:00:4" 
                             Storyboard.TargetName="CircleKnob" 
                             Storyboard.TargetProperty="(Canvas.Left)">
                <DoubleAnimation.EasingFunction>
                    <ElasticEase Oscillations="3" 
                                 Springiness="10" 
                                 EasingMode="EaseOut">
                    </ElasticEase>
                </DoubleAnimation.EasingFunction>
            </DoubleAnimation>
        </Storyboard>
    </BeginStoryboard>
    <BeginStoryboard x:Key="EllipseFinite">
        <Storyboard>
            <DoubleAnimation x:Name="EllipseIniteAnim" To="420" Duration="00:00:4" 
                             Storyboard.TargetName="CircleKnob" 
                             Storyboard.TargetProperty="(Canvas.Left)">
                <DoubleAnimation.EasingFunction>
                    <ElasticEase Oscillations="3" 
                                 Springiness="10" 
                                 EasingMode="EaseOut">
                    </ElasticEase>
                </DoubleAnimation.EasingFunction>
            </DoubleAnimation>
        </Storyboard>
    </BeginStoryboard>

MainWindow(Switcher):

<Grid Height="260" Width="665">
        <Canvas>
            <Rectangle x:Name="ToggleSwitch" Width="665" Height="260" Style="{StaticResource BaseButton}"          >
            </Rectangle>
            <Label     x:Name="SwitchLables"                          Style="{StaticResource SwitchLabel}" 
                       Canvas.Left="322" Canvas.Top="88"                                                           >SWITCH</Label>
            <Ellipse   x:Name="CircleShadow" Width="260" Height="260"  Fill="{StaticResource CircleBehind}"
                       Opacity="0.7"
                       MouseMove="CircleKnob_MouseMove"
                       ></Ellipse>
            <Ellipse   x:Name="CircleKnob" Width="230" Height="230"  Style="{StaticResource EllipseEffect}"
                       Fill="{StaticResource Circle}" 
                       Canvas.Left="14" Canvas.Top="15"
                       MouseDown="CircleKnob_MouseDown"
                       MouseMove="CircleKnob_MouseMove"
                       MouseUp  ="CircleKnob_MouseUp"   >
                <Ellipse.BitmapEffect>
                    <DropShadowBitmapEffect Direction="270" ShadowDepth="7" Opacity="0.5" Softness="1"             ></DropShadowBitmapEffect>
                </Ellipse.BitmapEffect>
            </Ellipse>
        </Canvas>

xaml.cs:

public partial class Switcher : Window
    {
        public Switcher()
        {
            InitializeComponent();
        }
        bool Action = false;
        double   InitPxls = 15;
        double FinitePxls = 420;
        double Movement;
        Point Point;
        /*private void CircleKnob_MouseDown(object sender, MouseButtonEventArgs e)
        {
            Action = true;
            Point = Mouse.GetPosition(CircleKnob);
            Mouse.Capture(CircleKnob);
        }
        private void CircleKnob_MouseMove(object sender, MouseEventArgs e)
        {
            if (Action)
            {
                Movement = Canvas.GetLeft(CircleKnob) + Mouse.GetPosition(CircleKnob).X - Point.X;
                if (Movement > InitPxls && Movement < FinitePxls) {
                    Canvas.SetLeft(CircleKnob, Movement);
                    Canvas.SetLeft(CircleShadow, Movement - 15);
                }
            }
        }
        private void CircleKnob_MouseUp(object sender, MouseButtonEventArgs e)
        {
            Action = false;
            Mouse.Capture(null);
            if (Movement < InitPxls + 210)
            {
                Canvas.SetLeft(CircleKnob,   InitPxls);
                Canvas.SetLeft(CircleShadow, InitPxls - 15);
            }
            else
            {
                Canvas.SetLeft(CircleKnob,   FinitePxls);
                Canvas.SetLeft(CircleShadow, FinitePxls - 15);
            }
        }
    }
*/
private void CircleKnob_MouseUp(object sender, MouseButtonEventArgs e)
        {
            Action = false;
            Mouse.Capture(null);
            if (Movement < InitPxls + 210)
            {
                this.Loaded += new RoutedEventHandler(InitAnimation);
            }
            else
            {
                this.Loaded += new RoutedEventHandler(FinitAnimation);
            }
        }
        private void InitAnimation(object sender, RoutedEventArgs e) {
            Storyboard  Init = this.FindResource("EllipseInite" ) as Storyboard;
            Storyboard.SetTarget(Init, this.CircleKnob);
            Init.Begin();
        }
        private void FinitAnimation(object sender, RoutedEventArgs e)
        {
            Storyboard Finit= this.FindResource("EllipseInite") as Storyboard;
            Storyboard.SetTarget(Finit, this.CircleKnob);
            Init.Begin();
        }
READ ALSO
C# fluent interface(цепочные интерфейсы),Custom HtmlHelper

C# fluent interface(цепочные интерфейсы),Custom HtmlHelper

Продолжение темы fluent interface

198
Использование базы данных в приложении winforms

Использование базы данных в приложении winforms

Есть толстый клиент написанный на winformsК нему подключена база данных mssql

209
BackgroundWorker для while

BackgroundWorker для while

Подскажите подойдет ли BackgroundWorker для такой цели :

213
Перечислить все поля и их значения C#

Перечислить все поля и их значения C#

Нужно для отладки прочитать название всех полей класса и их значенияНу например, имеется экземпляр класса dog

184