Состояния макета Silverlight перед загрузкой - ›переход после загрузки просто не работает

Я пытаюсь добавить начальную анимацию при добавлении элементов в список. Для этого я использую Layoutstates, сгенерированные смешиванием внутри itemcontainerstyle:

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

Я просто не получаю никакой анимации, хотя я просто следил за обучающими программами Channel9 шаг за шагом!

Это первая проблема с моим диспетчером состояний, я также сталкиваюсь с проблемами с триггерами данных, которые должны переходить в состояние при выполнении определенных условий, когда некоторые из них работают, а некоторые нет, но все мои привязки верны! Также все анимации работают в предварительном просмотре Expression Blend.

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

Спасибо за помощь!


person sharp johnny    schedule 28.07.2011    source источник
comment
У меня проблема в том, что я создаю свою коллекцию в конструкторе viewmodels перед установкой datacontext. штука перехода макета, кажется, распознает только операции в списке, а не изменения самого свойства списка. подробнее см. здесь: forum.silverlight.net/ p / 235377 / 581822.aspx /   -  person sharp johnny    schedule 04.08.2011


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

person Bryant    schedule 16.09.2011
comment
Что ж, это могло бы быть решением, не очень хорошим, но, возможно, сработает в моем сценарии. Я частично решил это с помощью настраиваемого элемента управления переходом, который анимируется при создании, к сожалению, не работает при выгрузке элемента управления, так как это останавливает любую анимацию (как предотвратить выгрузку до завершения анимации?) - person sharp johnny; 20.09.2011