Валидация не полностью исчезает в анимации - PullRequest
0 голосов
/ 04 марта 2010

У меня есть окно WPF, которое содержит ContentPresenter, для которого Высота и Ширина по умолчанию установлены в 0. Когда пользователь нажимает кнопку, я запускаю анимацию, чтобы преобразовать свойства высоты и ширины ContentPresenter в 896,1024 (на самом деле он также выполняет 3 поворота при увеличении), и это все хорошо ...

DataContext для пользовательского элемента управления реализует IDataErrorInfo, и если пользователь не нажимает флажок «Я прочитал и понимаю эти инструкции по охране труда и технике безопасности», то вокруг флажка отображается красная рамка ...

Моя проблема в том, что если пользователь нажимает кнопку «Отмена», и я запускаю анимацию, которая сжимает Высота и Ширина обратно до 0,0, то UserControl сжимается по мере необходимости, но красная граница не исчезает полностью - она оставляет один красный пиксель в середине моего окна

У кого-нибудь есть идеи, что я делаю не так? Я предполагаю, что «красная граница» - это просто Adorner, отображаемый WPF для меня, поэтому я не уверен, как изменить это поведение ...

Вся помощь очень ценится!

Обновление - Я попробовал отличное предложение Эйба, но, к сожалению, оно не сработало, но оно заставило меня попробовать другие вещи ... Так что теперь (временно) я прокомментировал «сокращающиеся» анимации и просто установите видимость Collapsed в KeyTime = "0: 0: 0.9" ... когда я нажимаю кнопку отмены, чуть менее чем через секунду, UserControl исчезает, но красный рекламщик упрямо остается: (

В качестве дополнительного бита информации (не уверен, если уместен?) UserControl, отображаемый в ContentPresenter, также содержит ContentPresenter для визуализации UserControl и его внутреннее содержимое, которое содержит средство проверки правильности ...

пример кода:

<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>

Спасибо, Ян

1 Ответ

1 голос
/ 04 марта 2010

Если вы добавите 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>

Очевидно, вам нужно будет выполнить обратную операцию в KeyTime 0 для openViewAnimation.

...