Состояния макета Silverlight перед загрузкой -> после загрузки переход не работает - PullRequest
3 голосов
/ 28 июля 2011

Я пытаюсь добавить начальную анимацию, когда элементы добавляются в список.Для этого я использую Layoutstates, сгенерированные blend внутри 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 ) ...

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

1 Ответ

1 голос
/ 16 сентября 2011

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

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

...