したがって、メインのユーザーコントロールの上に「読み込み中」と表示されるユーザーコントロールが効果的であれば、読み込みコントロールがあり、読み込まれるまでユーザーがプログラムと対話するのを防ぎます。
視覚的な状態を使用して、「読み込み中」コントロールの可視性をゆっくりと折りたたまれた状態に移行し、プログラム内の他の状態では折りたたまれたままにしたいと考えています。
私は現在、ローディングコントロールを持っています:
<ContentControl x:Name="contentControl" Content="{StaticResource loadingAnimation}">
<i:Interaction.Triggers>
<ei:DataTrigger Value="false" Binding="{Binding IsLoadingAnimationVisible}">
<ei:GoToStateAction StateName="Loaded"/>
</ei:DataTrigger>
</i:Interaction.Triggers>
</ContentControl>
どこ:
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="VisualStateGroup">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0:0:0.5" To="Collapsed">
<VisualTransition.GeneratedEasingFunction>
<CubicEase EasingMode="EaseInOut"/>
</VisualTransition.GeneratedEasingFunction>
</VisualTransition>
<VisualTransition GeneratedDuration="0:0:0.5" To="Expanded">
<VisualTransition.GeneratedEasingFunction>
<CubicEase EasingMode="EaseInOut"/>
</VisualTransition.GeneratedEasingFunction>
</VisualTransition>
<VisualTransition GeneratedDuration="0:0:0.5" To="Loaded">
<VisualTransition.GeneratedEasingFunction>
<CubicEase EasingMode="EaseInOut"/>
</VisualTransition.GeneratedEasingFunction>
</VisualTransition>
</VisualStateGroup.Transitions>
<VisualState x:Name="Expanded">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="contentControl">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Collapsed}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Collapsed">
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Width)" Storyboard.TargetName="metaGrid">
<EasingDoubleKeyFrame KeyTime="0" Value="0"/>
</DoubleAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="contentControl">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Collapsed}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Loaded">
<Storyboard>
<BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.IsHitTestVisible)" Storyboard.TargetName="contentControl">
<DiscreteBooleanKeyFrame KeyTime="0" Value="False"/>
</BooleanAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="contentControl">
<EasingDoubleKeyFrame KeyTime="0" Value="0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
これに関する問題は、Expanded および Collapsed 状態をトリガーすると、「読み込み中」の contentControl が表示され、0.5 秒かけて折りたたまれてフェードすることです。Loaded 状態がトリガーされた後、ローディング コントロールを永続的に折りたたみ状態に設定するにはどうすればよいですか?
編集
これがブレンドで可視性を移行する正しい方法であるかどうかはわかりません (つまり、ishittestvisible = false および opacitiy = 0 を設定することですが、visibility.collapsed を設定すると、私が試したときに移行していないように見える唯一の方法でした。折りたたみにスナップ)