0

私は .net 4、vs2010 を使用しており、折りたたまれて透明 (不透明度 0) で開始し、ボタンのクリックに応答して表示および不透明になる必要があるユーザー コントロールを作成しました。

<UserControl x:Class="Ihi.LeadRetrieval.Client.Views.HelpView"
                     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                     xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
                     xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
                     mc:Ignorable="d" 
                     d:DesignHeight="300" d:DesignWidth="300">
<Grid x:Name="HelpGrid" Visibility="Collapsed" Opacity="0">
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="HelpStateGroup">
            <VisualStateGroup.Transitions>
                <VisualTransition GeneratedDuration="0:0:0.5">
                    <VisualTransition.GeneratedEasingFunction>
                        <CircleEase EasingMode="EaseInOut"/>
                    </VisualTransition.GeneratedEasingFunction>
                </VisualTransition>
            </VisualStateGroup.Transitions>
            <VisualState x:Name="HelpOpen">
            <Storyboard>
                <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="HelpGrid">
                    <EasingDoubleKeyFrame KeyTime="0" Value="0.95"/>
                </DoubleAnimationUsingKeyFrames>
                <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="HelpGrid">
                    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
                </ObjectAnimationUsingKeyFrames>
            </Storyboard>
            </VisualState>
            <VisualState x:Name="HelpClosed">
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
    <Border Background="#00427A" CornerRadius="3">
        <DockPanel Margin="5">
            <ContentPresenter DockPanel.Dock="Bottom" Margin="12,10,0,0" Content="{Binding Path=Detail}" Style="{StaticResource HelpText}"/>
            <Label Style="{StaticResource HelpHeaderText}" Content="{Binding Path=Header}" DockPanel.Dock="Left" MaxHeight="50"/>
            <Button x:Name="CloseHelpButton" Style="{StaticResource HelpButtonStyle}" Content="X" HorizontalAlignment="Right" VerticalAlignment="Top" DockPanel.Dock="Right" MaxHeight="50">
                <i:Interaction.Triggers>
                    <i:EventTrigger EventName="Click">
                        <ei:GoToStateAction x:Name="CloseAction" StateName="HelpClosed"/>
                    </i:EventTrigger>
                </i:Interaction.Triggers>
            </Button>
        </DockPanel>
    </Border>
</Grid>

ただし、親ユーザー コントロールからこのコントロールをターゲットにして、HelpOpen 視覚状態をトリガーすると、アニメーションの完了後にヘルプ コントロールが突然表示されることに気付きます。期待どおりにフェード インしません。

<view:HelpView x:Name="helpView" />
<Button x:Name="ButtonOpen" Margin="0,0,25,0" VerticalAlignment="Top" Content="Open">
   <i:Interaction.Triggers>
        <i:EventTrigger EventName="Click">
            <ei:GoToStateAction TargetObject="{Binding ElementName=helpView}" StateName="HelpOpen"/>
        </i:EventTrigger>
   </i:Interaction.Triggers>
</Button>

これは、ヘルプ コントロールがアニメーションの最後にのみ表示されるようになり、不透明度が増加する遷移がレンダリングされないためだと思います。

不透明度の値を調整する前に、可視性プロパティを可視に設定するように指定する方法はありますか?

4

1 に答える 1

0

質問に対する答えが見つかったかどうかはわかりませんが、トランジションと視覚的な状態は 2 つの異なるタイムラインであることを知っておくと役立つかもしれません。

トランジションとステートをブレンドで編集するのが最も簡単です。イベントのシーケンスは次のとおりです。

  1. 状態 A から開始
  2. いくつかのトリガーにより、「状態への移行」が発生します B
  3. 状態 A から B への遷移が再生されます (0.5 秒)。トランジションの不透明度や可視性に変更はありません
  4. 状態 B が適用/再生されます。不透明度と可視性の変更はここにあります。状態 B の持続時間は 0 秒なので、すぐに変更されます。

私が通常行うことは、ブレンドで遷移を明示的に作成することです ( ->stateB、stateA->、または stateA->stateB など)。次に、可視性の変更が適用されるタイミングと、不透明度の変更が開始/終了するタイミングを調整できます。

于 2011-03-10T23:36:21.543 に答える