2011-07-28 5 views
3

항목이 목록 상자에 추가 될 때 초기 애니메이션을 추가하려고합니다. 나는 itemcontainerstyle 내부에서 혼합에 의해 생성 된 Layoutstates을 사용하고이를 위해 :Silverlight 레이아웃 상태 beforeloaded -> Afterloaded 전환이 작동하지 않습니다.

내 목록 상자는 다음과 같습니다
<VisualStateGroup x:Name="LayoutStates"> 
    <VisualStateGroup.Transitions> 
     <VisualTransition GeneratedDuration="0:0:0.2"/> 
    </VisualStateGroup.Transitions> 
    <VisualState x:Name="AfterLoaded"/> 
    <VisualState x:Name="BeforeLoaded"> 
     <Storyboard> 
      <DoubleAnimation Duration="0" To="35" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="grid" d:IsOptimized="True"/> 
      <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="grid" d:IsOptimized="True"/> 
     </Storyboard> 
    </VisualState> 
    <VisualState x:Name="BeforeUnloaded"> 
     <Storyboard> 
      <DoubleAnimation Duration="0" To="0.85" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleX)" Storyboard.TargetName="grid" d:IsOptimized="True"/> 
      <DoubleAnimation Duration="0" To="0.85" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)" Storyboard.TargetName="grid" d:IsOptimized="True"/> 
      <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="grid" d:IsOptimized="True"/> 
     </Storyboard> 
    </VisualState> 
</VisualStateGroup> 

: 난 그냥 난 그냥 다음에도 불구하고 어떤 애니메이션을하지 않는

<ListBox Grid.Row="1" ItemsSource="{Binding Days}" x:Name="Days" 
        HorizontalAlignment="Stretch" 
        SelectedItem="{Binding CurrentDay, Mode=TwoWay}" 
        ItemTemplate="{StaticResource TimeRecordByDayItemTemplate}" 
        ItemsPanel="{StaticResource ByMonthDaysItemsPanelTemplate}" 
        ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
        ItemContainerStyle="{StaticResource DayListBoxItemStyle}" /> 

채널 9 자습서 단계별로!

이것은 내 상태 관리자의 첫 번째 문제입니다. 데이터 조건에 문제가 발생하여 특정 조건이 충족되는 경우, 일부 작업이 수행되고 일부 작업이 수행되지 않는 상태로 이동해야하지만 모든 바인딩이 올바른 상태입니다. ! 또한 모든 애니메이션이 Expression Blend 미리보기에서 작동합니다.

내가 문제를 만들 수 없다, 나는 ... (channel 9에서 이쪽을 봐주세요) 자신의 환경에서 작동하지 않는 간단한 샘플에서 복사 실버와 애니메이션에 자주

감사를 들어이 했어 너 도움이!

+0

내가 가진 문제는 viewModels 생성자에서 데이터 컬렉션을 설정하기 전에 내 컬렉션을 만드는 것입니다. 레이아웃 전환은 목록 속성 자체의 변경 사항이 아니라 목록의 작업 만 인식하는 것처럼 보입니다. 자세한 내용은 여기를 참조하십시오 : http://forums.silverlight.net/p/235377/581822.aspx/1?p=True&t=634480406085452885 –

답변

1

모든 것이로드되면 항목을 하나씩 추가해야하는 것처럼 들립니다. 간단한 해결책처럼 보인다 당신의보기 모델이 될 것입니다 :리스트 박스가 설정되면

public class MyViewModel 
{ 
    private string[] _items; 
    private ObservableCollection<string> _itemCollection; 

    public MyViewModel() 
    { 
    // meets requirement of loading items in constructor 
    _items = { "Johnny", "Thommy", "Jay", "Wommy" }; 
    } 

    public ObservableCollection<string> Items 
    { 
    get 
    { 
     if (_itemCollection == null) 
     { 
      _itemCollection = new ObservableCollection<string>(); 
      Dispatcher.Invoke(() => LoadItems()); 
     } 
     return _itemCollection; 
    } 
    } 

    private void LoadItems() 
    { 
    foreach (var item in _items) 
    { 
     ItemCollection.Add(item); 
    } 
    } 
} 

은 기본적으로 바인딩 당신이 컬렉션에 항목의 추가를 대기열. 이렇게하면 적절한 시간에로드 된 항목이 있어야 애니메이션이 실행됩니다.

+0

글쎄, 그건 해결책이 될 수는 없지만 좋지는 않지만 내 시나리오에서는 작동 할 수 있습니다. . 부분적으로 애니메이션을 생성하는 사용자 지정 전환 컨트롤로 해결했습니다. 불행히도 애니메이션을 중지 할 때 컨트롤을 언로드 할 때 작동하지 않습니다 (애니메이션이 완료 될 때까지 언로드되지 않도록하는 방법). –