Анимация в DataGrid приложения Silverlight - Как? - PullRequest
2 голосов
/ 31 марта 2009

Я начинаю поболтать с Silverlight (хотя в настоящее время он чувствует себя иначе), переписав существующее приложение ASP.NET - такое же хорошее место для начала, как и я.

Я «освоил» извлечение данных из базы данных, через службу и в сетку данных, а также заполнение элементов изображения в строках. Пока все хорошо.

Теперь я застрял и у меня болит голова!

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

Мой xaml выглядит так:

<data:DataGrid.Columns>
.
.
.
.
<data:DataGridTemplateColumn>
    <data:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <StackPanel x:Name="AnimationPanel">
                <StackPanel.Resources>
                    <Storyboard x:Key="ShowProgress">
                        <DoubleAnimation Storyboard.TargetProperty="Width"
                                        Storyboard.TargetName="goalProgressBar_Complete"
                                         From="0" To="50"
                                        Duration="0:0:5">
                        </DoubleAnimation>
                    </Storyboard>
                </StackPanel.Resources>
                <Rectangle x:Name="goalProgressBar_Complete"
                           Width="1" Height="100"
                           Fill="#0aa60e"></Rectangle>
            </StackPanel>
        </DataTemplate>
    </data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
</data:DataGrid.Columns>

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

Я пытаюсь сделать что-то, что Silverlight просто не поддерживает, или я что-то упускаю очень просто?

Заранее спасибо.

Обновление: Хотя я еще не вышел из леса, мне удалось запустить анимацию с соответствующим столбцом. Ответ, предоставленный MasterMax, побудил меня взглянуть на EventTriggers, и пересмотренный xaml выглядит так:

<data:DataGridTemplateColumn>
    <data:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Rectangle x:Name="GoalProgress" Height="100" Width="1" Fill="Green">
                <Rectangle.Triggers>
                    <EventTrigger RoutedEvent="Rectangle.Loaded">
                        <EventTrigger.Actions>
                            <BeginStoryboard>
                                <Storyboard>
                                    <DoubleAnimation Storyboard.TargetProperty="Width"
                                             Storyboard.TargetName="GoalProgress"
                                             From="0" To="50" Duration="0:0:5">
                                    </DoubleAnimation>
                                </Storyboard>
                            </BeginStoryboard>
                        </EventTrigger.Actions>
                    </EventTrigger>
                </Rectangle.Triggers>
            </Rectangle>
        </DataTemplate>
    </data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>

Все, что мне нужно сейчас сделать, это связать значение% в свойстве «Кому» и добавить нижележащий красный прямоугольник. Без сомнения, это окажется не так просто, как я сейчас надеюсь, но тогда было бы не весело, иначе бы это было; -)

Ответы [ 3 ]

1 голос
/ 31 марта 2009

Мне кажется, что вы на самом деле не играете в раскадровку. Вам необходимо добавить обработчики ввода и отпускания мыши для прямоугольника, а затем соответствующим образом воспроизвести и остановить раскадровку. Обязательно остановите и затем начните играть на раскадровке в команде ввода (в противном случае вы получите интересные побочные эффекты).

Обновление

Хорошо, проведя весь день в Silverlight, я не намного ближе к помощи. Я искал файл generic.xaml внутри сборки Silverlight, содержащей DataGrid. Вы могли бы рассмотреть возможность взглянуть туда. Из того, что я вижу, они достигают некоторого из этого для перехода к деталям строк с помощью шаблонов управления, хотя я еще не посмотрел соответствующий код, чтобы точно определить, как.

1 голос
/ 31 марта 2009

Попробуйте подключить его к EventTrigger для Datagrid. Нечто похожее на это:

<Window.Triggers>
        <EventTrigger RoutedEvent="Window.Loaded">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation Name="EntranceAnimation"
                        Storyboard.TargetName="MainWindow" 
                        Storyboard.TargetProperty="Opacity"
                        From="0.0"
                        To="1.0"
                        Duration="0:0:3">
                    </DoubleAnimation>
                </Storyboard>
                </BeginStoryboard>
        </EventTrigger>
    </Window.Triggers>

В вашем случае вы будете искать событие DataGrid.Loaded (или что-то подобное). Это работает для меня, и я выгружаю все окно на загруженной странице.

0 голосов
/ 31 марта 2009

для приложений такого типа анимация может быть не лучшим решением. вы можете попробовать связать свойство ширины движущегося прямоугольника с переменной в вашем приложении или настроить ширину с каждым тиком по мере изменения прогресса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...