2010-10-15 2 views
0

Я использую .net 4, vs2010 и создал пользовательский элемент управления, который должен начать свертываться и прозрачно (непрозрачность 0) и стать видимым и непрозрачным в ответ на нажмите кнопку.VisualState, который начинает свертываться, взаимодействует с другими анимациями в WPF .NET 4

<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, я замечаю, что контроль помощь оказывается abruptely после того, как анимация завершается - он не выцветает, как ожидается.

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

Я считаю, что это происходит потому, что помогают контролировать становится видимым только в конце анимации и, таким образом, переход возрастающей непрозрачности не визуализируется.

Есть ли способ указать, что свойство видимости должно быть видимым до изменения значения непрозрачности?

ответ

0

Я не уверен, что вы нашли ответ на свой вопрос, но это может помочь узнать, что переход и визуальное состояние - это два разных временных графика.

Проще всего изменить свой переход и состояние в смеси. Последовательность событий такова:

  1. Начало в государстве А
  2. Некоторые триггер вызывает «перейти к государственной» B
  3. Переход от состояния А к В пьес (0,5 секунды). Нет изменений прозрачности или видимости в вашем переход
  4. Состояние B применяется/воспроизводится. Вот где ваши непрозрачности и видимость изменения, и поскольку состояние B имеет длительность 0 секунд, они происходят сразу

То, что я обычно делаю это явно создать переход в смеси (или -> stateB, stateA- >, или stateA-> stateB и т. Д.). Затем вы можете настроить, когда применяется изменение видимости, и когда изменение/уменьшение непрозрачности начинается/заканчивается.