当UI线程忙时,WPF中的动画/故事板停止

时间:2016-06-26 16:04:11

标签: c# wpf storyboard

我的UI组件需要一段时间才能加载,我尽可能地尝试减少加载时间(并且可能会在将来再提供一些东西),但我还介绍了一个'忙'指示器给用户一些反馈。

但是,我发现在加载组件时动画会停止,这使它变得毫无用处。我以为WPF在一个单独的线程上有动画?

这就是我的意思,加载指示器位于正在加载和取消编码的“页面”后面,因此它仅显示何时删除一个。为了演示,我添加了一个可以一直看到的一面:

enter image description here

我可以做些什么来在另一个帖子中运行故事板动画吗?

这是样式的一部分,取自Material Design XAML工具包(我试图提取相关信息:

<Style x:Key="MaterialDesignLinearProgressBar" TargetType="{x:Type ProgressBar}">
 ...
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ProgressBar}">
            ...
                <Grid x:Name="TemplateRoot" RenderTransformOrigin="0,0.5" Opacity="0" Height="4">
                    <Grid.RenderTransform>
                        <TransformGroup>
                            <ScaleTransform ScaleX="0" ScaleY="0" />
                            <SkewTransform/>
                            <RotateTransform/>
                            <TranslateTransform/>
                        </TransformGroup>
                    </Grid.RenderTransform>
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="CommonStates">
                            ...
                            <VisualState x:Name="Indeterminate">
                                <Storyboard RepeatBehavior="Forever">
                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" Storyboard.TargetName="Animation">
                                        <EasingDoubleKeyFrame KeyTime="0" Value="0.25"/>
                                        <EasingDoubleKeyFrame KeyTime="0:0:1" Value="0.25"/>
                                        <EasingDoubleKeyFrame KeyTime="0:0:2" Value="0.25"/>
                                    </DoubleAnimationUsingKeyFrames>
                                    <PointAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransformOrigin)" Storyboard.TargetName="Animation">
                                        <EasingPointKeyFrame KeyTime="0" Value="-0.5,0.5"/>
                                        <EasingPointKeyFrame KeyTime="0:0:1" Value="0.5,0.5"/>
                                        <EasingPointKeyFrame KeyTime="0:0:2" Value="1.5,0.5"/>
                                    </PointAnimationUsingKeyFrames>
                                </Storyboard>
                            </VisualState>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                    ...
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="transitions:TransitionAssist.DisableTransitions" Value="True">
                        <Trigger.EnterActions>
                            <BeginStoryboard Storyboard="{StaticResource OnLoadedNoAnimation}" Name="BeginStoryboardOnLoadedNoAnimation" />
                        </Trigger.EnterActions>
                        <Trigger.ExitActions>
                            <RemoveStoryboard BeginStoryboardName="BeginStoryboardOnLoadedNoAnimation" />
                        </Trigger.ExitActions>
                    </Trigger>
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="IsVisible" Value="True" />
                            <Condition Property="transitions:TransitionAssist.DisableTransitions" Value="False" />
                ...
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

完整代码https://github.com/ButchersBoy/MaterialDesignInXamlToolkit/blob/master/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.ProgressBar.xaml

0 个答案:

没有答案