تبدأ وحة العمل ضمن آخر القصص المصورة الجدول الزمني

StackOverflow https://stackoverflow.com/questions/202914

  •  03-07-2019
  •  | 
  •  

سؤال

ولدي القصة المصورة (1) أن يفعل بعض الحركات الأساسية في 2 ثانية. أريد لوحة العمل (1) للقيام بكل الرسوم المتحركة الملكية لقد إعداده للقيام (كل هذا يعمل بشكل جيد). ولكن في 3 ثوان في لوحة العمل (1) أريد أن أبدأ القصة المصورة (2) والخروج القصة المصورة (1) دون تدخل المستخدم على الإطلاق.

والشيء الوحيد رأيت أن يسمح لي أن أفعل ذلك هو عندما ينقر المستخدم على شيء. أريد أن تكون هذه الآلية على أساس الموقف من (1) جدول زمني القصة المصورة الحالية.

وآمل أن يكون هذا الأمر يبدو معقولا تماما بما فيه الكفاية. واسمحوا لي أن أعرف إذا كنت بحاجة لي أن أشرح شيئا في مزيد من التفاصيل.

وشكرا.

وتحرير: الرجاء الرد على الجواب في XAML أو VB.net اللغة. :)

هل كانت مفيدة؟

المحلول 3

وحسنا جئت إلى حل. أنا فقط ولدت موضوع جديد للانتظار لمدة 3 ثوان، ثم لم لاستدعاء استدعاء لتشغيل لوحة العمل من أن الموضوع.

    Dim board As Storyboard = New Storyboard
    board = DirectCast(TryFindResource("DoSplit"), Storyboard)
    If board IsNot Nothing Then
        board.Begin(Me, True)

        Dim t As Thread
        t = New Thread(AddressOf Me.WaitToHidePanel)
        t.SetApartmentState(ApartmentState.STA)
        t.Start()

    End If

هل موضوع المندوبين وظائف آمن بك وسوف يكون ذلك العمل. انها الإختراق القبيح في رأيي، لكنه يعمل في الوقت الراهن.

نصائح أخرى

وعادة من أجل السيطرة على الرسوم المتحركة خلال الفترة الزمنية التي سوف تستخدم "إطارات مفتاحية". الرسوم المتحركة الإطار الأساسي تسمح لك لتحديد قيم معينة للخاصية كنت موحية في أوقات محددة. في WPF كل الرسوم المتحركة لديه الرسوم المتحركة الإطار الرئيسي المقابل، مثل 'DoubleAnimation' له 'DoubleAnimationUsingKeyFrames ".

وأنا لا أعتقد أنه من الممكن أن تبدأ القصة المصورة الجديدة من داخل الحركة. ولكن هل يمكن تحقيق نفس النتيجة من خلال وجود كل من القصص المصورة على نفس الجدول الزمني والبدء القصة المصورة (2) مع تأخير محددة على أساس مدة القصة المصورة (1). شيء من هذا القبيل:

<StackPanel>
    <Rectangle Name="recProgressBar"
               Fill="Orange"
               Width="1"
               Height="25"
               Margin="20"
               HorizontalAlignment="Left" />
    <Button Content="Start Animation"
            Width="150"
            Height="25">
        <Button.Triggers>
            <EventTrigger RoutedEvent="Button.Click">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetName="recProgressBar"
                                         Storyboard.TargetProperty="Width"
                                         From="0"
                                         To="250"
                                         Duration="0:0:2" />
                        <Storyboard BeginTime="0:0:3">
                            <ColorAnimation Storyboard.TargetName="recProgressBar"
                                            Storyboard.TargetProperty="Fill.Color"
                                            To="DarkGreen"
                                            Duration="0:0:1" />
                        </Storyboard>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Button.Triggers>
    </Button>
</StackPanel>

وهنا سوف الرسوم المتحركة اللون تبدأ 1 ثانية بعد الانتهاء من الرسوم المتحركة العرض. يمكن أن يكون يستحق المحاولة.

وبفضل Megakemp، وهذا ما كنت خائفة من الحاجة إلى القيام به. لم أكن أريد أن يكون للإدارة نسختين من القصة المصورة في XAML. إذا كان لدي لإضافة عنصر تحكم وإدارتها عبر لوحة العمل (1) I سوف تضطر إلى تذكر لنسخ ولصق التغييرات على هذه القصة المصورة الأخرى (2). أعتقد تلك هي الأطواق عليك أن تقفز من خلال حتى تأتي وظيفة أنني أبحث عنه.

والآن أنا لم أفكر في فكرة أخرى في محاولة لكنه لم يكن قادرا على الحصول على وظيفة. هذه هي فكرتي أدناه، يمكنني تفسير ذلك أفضل في التعليمات البرمجية .. وهذا رمز أدناه لا ترجمة، لمجرد الحصول على وجهة نظري عبر.

Dim board As Storyboard = New Storyboard
board = DirectCast(TryFindResource("Animation1"), Storyboard)
If board IsNot Nothing Then
    board.Begin(Me)
    While board.GetCurrentState(Me) = ClockState.Active
        'Wait until Animation1 ends
    End While
    'Start Animation2
    board = DirectCast(TryFindResource("Animation2"), Storyboard)
    If board IsNot Nothing Then
        board.Begin(Me)
    End If
End If

وشكرا لمساعدتكم .. وإذا كان أي شخص آخر لديه إجابة أخرى أو أكثر بصيرة من فضلك لا تتردد في الرد، وأنا لست التخلي عن هذه الفكرة تماما حتى الآن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top