Изменение шаблона или содержимого из раскадровки - PullRequest
0 голосов
/ 03 июля 2019

Я хочу иметь DataTemplate, который я могу использовать в ItemsControl.Каждый отдельный объект DataTemplate должен быть анимирован независимо, слушая DataTriggers.

Этот DataTemplate в настоящее время выглядит так:

<DataTemplate x:Key="WindowButton">
        <DataTemplate.Resources>
            <Style TargetType="ContentControl" x:Key="IconControl">
                <Style.Resources>
                    <ContentControl x:Key="DrawerOpened" Content="{DynamicResource DrawerOpenedTemplate}" />
                </Style.Resources>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding IsOpened}" Value="True">
                        <DataTrigger.EnterActions>
                            <BeginStoryboard>
                                <Storyboard>
                                    <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0" RepeatBehavior="1x" Duration="0:0:0.5"/>
                                    <ObjectAnimationUsingKeyFrames Duration="0" BeginTime="0:0:0.5" Storyboard.TargetProperty="Template">
                                        <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{StaticResource DrawerOpened}"/>
                                    </ObjectAnimationUsingKeyFrames>
                                    <DoubleAnimation Storyboard.TargetProperty="Opacity" From="0" To="1" BeginTime="0:0:0.5" Duration="0:0:0.5"/>
                                </Storyboard>
                            </BeginStoryboard>
                        </DataTrigger.EnterActions>
                        <!--<Setter Property="Template" Value="{DynamicResource DrawerOpenedTemplate}" />-->
                    </DataTrigger>
                    <DataTrigger Binding="{Binding IsOpened}" Value="False">
                        <Setter Property="Template" Value="{DynamicResource DrawerClosedTemplate}" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding IsWorking}" Value="True">
                        <Setter Property="Template" Value="{DynamicResource WaitSpinnerTemplate}" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </DataTemplate.Resources>
        <Button Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Path=DataContext.WindowControlClickCommand}" CommandParameter="{Binding }">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="2*"/>
                    <RowDefinition Height="1*"/>
                </Grid.RowDefinitions>
                <StackPanel Grid.Row="0" Orientation="Horizontal">
                    <ContentControl Height="50" Width="50" Style="{DynamicResource IconControl}" Margin="5,10,0,0"></ContentControl>
                    <TextBlock HorizontalAlignment="Center" Margin="0,10,5,0" VerticalAlignment="Center" FontSize="30" Text="{Binding WindowLabel}" />
                </StackPanel>
                <TextBlock Grid.Row="1" Style="{StaticResource ActionLabelStyle}" Margin="0,0,0,5" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="20" />
            </Grid>
         </Button>
    </DataTemplate>

Как вы можете видеть, я создал DataTemplate с его внутренним стилем, который связан снекоторые свойства и должны измениться при изменении привязки.

Итак, я создал раскадровку с несколькими различными анимациями - поэтому элемент управления постепенно исчезает, затем его шаблон изменяется на что-то другое, а затем он медленно появляется снова вразной формы.В целом это работает хорошо, но я хочу сделать его более красивым, добавив анимацию.

К сожалению, раскадровка не может анимировать вещи, которые не могут быть заморожены по каким-либо причинам - этот конкретный ContentControl представляет собой просто некоторую векторную графику, описанную в XAML (Viewbox + Canvas + Path inside) без каких-либо внешних ссылок, обернутых в ControlTemplate.

Как мне обойти это и добиться такого описанного поведения?

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