0

ContentPresenterデフォルトで高さと幅が0に設定されているを含むWPFウィンドウがあります。ユーザーがボタンをクリックすると、アニメーションを実行してContentPresenterのHeightプロパティとWidthプロパティを896,1024に変換します(実際には、成長中に3回転します)。これはすべて問題ありません...

ユーザーコントロールのDataContextはIDataErrorInfoを実装し、ユーザーが[これらの健康と安全に関する指示を読んで理解しました]チェックボックスをクリックしない場合、チェックボックスの周囲に赤い境界線が表示されます...

私の問題は、ユーザーが[キャンセル]をクリックし、高さと幅を0,0に縮小するアニメーションを実行すると、UserControlが必要に応じて縮小されますが、赤い境界線が完全に消えないことです。ウィンドウの中央にある赤いピクセル

私が間違っていることを誰かが考えていますか?「赤い境界線」は、WPFによってレンダリングされた単なるAdornerであると想定しているため、この動作を変更する方法がわかりません...

すべてが大いに感謝します!

更新-阿部の優れた提案を試しましたが、残念ながらうまくいきませんでしたが、他のことも試してみました...そこで、(一時的に)「縮小」アニメーションをコメントアウトし、可視性を「折りたたみ」に設定しました。 KeyTime = "0:0:0.9" ...キャンセルを押すと、1秒も経たないうちに、UserControlは消えますが、赤い装飾者は頑固に残ります:(

追加の情報として(関連するかどうかわからない場合)、ContentPresenterに表示されるUserControlには、UserControlをレンダリングするためのContentPresenterと、検証装飾を含む内部コンテンツも含まれています...

コードサンプル:

<Button
    Name="signInButton"
    Grid.Row="0" Grid.Column="0"
    Margin="30"
    HorizontalAlignment="Right" VerticalAlignment="Bottom"
    Style="{StaticResource LargeButtonStyle}" 
    Content="Sign In"
    Command="{Binding SignInCommand}">
    <Button.Triggers>
        <EventTrigger
            RoutedEvent="Button.Click">
            <BeginStoryboard
                Storyboard="{DynamicResource openViewAnimation}" />
        </EventTrigger>
    </Button.Triggers>
</Button>

<ContentPresenter
    Name="mainView"
    Grid.RowSpan="2" Grid.ColumnSpan="2"
    HorizontalAlignment="Center" VerticalAlignment="Center"
    Opacity="0.9"
    Content="{Binding CurrentContent}">
    <ContentPresenter.RenderTransform>
        <RotateTransform
            Angle="0" />
    </ContentPresenter.RenderTransform>
</ContentPresenter>

<Storyboard x:Key="closeViewAnimation">
    <DoubleAnimation
        Storyboard.TargetName="mainView" Storyboard.TargetProperty="Height"
        From="896" To="0" Duration="0:0:0.9"
        AutoReverse="False" RepeatBehavior="1x" />
    <DoubleAnimation
        Storyboard.TargetName="mainView" Storyboard.TargetProperty="Width"
        From="1024" To="0" Duration="0:0:0.9"
        AutoReverse="False" RepeatBehavior="1x" />
</Storyboard>

ありがとう、イアン

4

1 に答える 1

1

他のアニメーションが完了した時点で要素の Visibility を Collapsed に設定する ObjectAnimationUsingKeyFrames を追加すると、装飾も消えます。

<Storyboard x:Key="closeViewAnimation">
    <DoubleAnimation
        Storyboard.TargetName="mainView" Storyboard.TargetProperty="Height"
        From="896" To="0" Duration="0:0:0.9"
        AutoReverse="False" RepeatBehavior="1x" />
    <DoubleAnimation
        Storyboard.TargetName="mainView" Storyboard.TargetProperty="Width"
        From="1024" To="0" Duration="0:0:0.9"
        AutoReverse="False" RepeatBehavior="1x" />
    <ObjectAnimationUsingKeyFrames 
        Storyboard.TargetName="mainView"
        Storyboard.TargetProperty="Visibility">
        <DiscreteObjectKeyFrame Value="{x:Static Visibility.Collapsed}" 
            KeyTime="0:0:0.9" />
    </ObjectAnimationUsingKeyFrames>
</Storyboard>

明らかに、openViewAnimation の KeyTime 0 で逆の操作を行う必要があります。

于 2010-03-03T21:57:01.697 に答える