2011-07-28 6 views
3

アイテムがリストボックスに追加されたときに最初のアニメーションを追加しようとしています。Silverlightレイアウトの状態が前にロードされました - >後の遷移がうまく動作しない

<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}" /> 

私はちょうど私がちょうど次られたにもかかわらず、任意のアニメーションを得ることはありません。私のリストボックスには、次のようになります

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

:私はitemcontainerstyle内部でブレンドによって生成されたLayoutstatesを、使用しています。このため channel9チュートリアルをステップバイステップで!

これは私の州のマネージャーの最初の問題です。私はdatatriggersの問題に遭遇しています。特定の条件が満たされていて、動作していてもいない状態がありますが、 ! また、すべてのアニメーションはExpression Blendプレビューで機能します。

私は問題を作ることができない、私は...(channel 9でここを見て)自分の環境で作業していない最も簡単なサンプルからコピーSilverlightとアニメーションでそう頻繁に

感謝のためにこれを持っていました手伝う!

+0

私が持っている問題は、datacontextを設定する前に、viewmodelsコンストラクタで自分のコレクションを作成することです。レイアウトの変更はリストの操作だけを認識し、リストのプロパティ自体の変更は認識しないようです。詳細についてはこちらをご覧ください:http://forums.silverlight.net/p/235377/581822.aspx/1?p=True&t=634480406085452885 –

答えて

1

すべてがロードされたら、アイテムを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); 
    } 
    } 
} 

ListBoxコントロールが設定したときに基本的には、コレクションに項目を追加することをキューに結合。これにより、アイテムが適切なタイミングでロードされ、アニメーションがトリガーされます。

+0

これは解決策になるかもしれませんが、それほどうれしくないかもしれませんが、私のシナリオではうまくいくかもしれません。アニメーションが停止するので、アニメーションが完了するまでアンロードを防ぐ方法を教えてください)。アニメーションが終了するまで、アニメーションを作成するカスタムトランジションコントロールで部分的に解決しました。残念ながらコントロールをアンロードしても機能しません。 –

関連する問題