0

アニメーションを制御したいカスタム コントロールがあります。これを使用して更新しようとしましVisualStateManager.GoToStateたが、常に Silverlight に戻りfalse、アニメーションが開始されません。これは、同じ XAML を使用しても WPF で完全に機能します。

Silverlight コード

//to start
retval = ExtendedVisualStateManager.GoToElementState(this.canvasParent, "WorkingState", true);

WPF コード

retval = VisualStateManager.GoToElementState(this.canvasParent, "WorkingState", true);

XAML (共通):

<Style TargetType="local:WaitSpinner">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="local:WaitSpinner">
                <Viewbox Visibility="{TemplateBinding Visibility}">
                    <Canvas RenderTransformOrigin="0.5,0.5" x:Name="CanvasParent" Width="120" Height="120">
                        <!-- other awesomeness -->

                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="Working">
                                <VisualState x:Name="WorkingState">
                                    <Storyboard>
                                        <DoubleAnimation
                                        Storyboard.TargetName="SpinnerRotate"
                                        Storyboard.TargetProperty="Angle"
                                        From="0" To="360" Duration="0:0:01.3"
                                        RepeatBehavior="Forever" />
                                    </Storyboard>
                                </VisualState>
                                <VisualState x:Name="Stop"/>
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups>
                    </Canvas>
                </Viewbox>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
4

1 に答える 1

0

<VisualStateManager.VisualStateGroups>最初の子を着る ControlTemplate:

<Style TargetType="local:WaitSpinner">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="local:WaitSpinner">
                <Viewbox Visibility="{TemplateBinding Visibility}">
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="Working">
                            <VisualState x:Name="WorkingState">
                                <Storyboard>
                                    <DoubleAnimation
                                    Storyboard.TargetName="SpinnerRotate"
                                    Storyboard.TargetProperty="Angle"
                                    From="0" To="360" Duration="0:0:01.3"
                                    RepeatBehavior="Forever" />
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="Stop"/>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                    <!-- ................. -->

編集:(私はあなたのコメントで完全に応答します)VisualStateManager GotoStateメソッドを次のように使用しますthis

VisualStateManager.GoToState(this, "WorkingState", true);
于 2013-07-19T10:27:10.167 に答える