3

我正在将EntranceThemeTransition动画应用于TextBlock. 有TextBlock一种风格,PageHeaderTextStyle其中有一种RenderTransform。我遇到的问题是RenderTransform应用了一个Translation效果,直到动画播放完毕后才真正呈现。因此,它看起来很奇怪,因为动画滚动控件,然后突然翻译将文本捕捉到位。有谁知道为什么会这样?

有没有办法在考虑翻译的情况下播放动画?

转换:

<Setter Property="RenderTransform">
    <Setter.Value>
        <TranslateTransform X="-2" Y="8"/>
    </Setter.Value>
</Setter>

文本块:

<TextBlock x:Name="pageTitle" Grid.Column="1" Text="{Binding Title}" Style="{StaticResource PageHeaderTextStyle}">
    <TextBlock.Transitions>
        <TransitionCollection>
            <EntranceThemeTransition/>
        </TransitionCollection>
    </TextBlock.Transitions>
</TextBlock>
4

2 回答 2

5

我刚刚遇到了完全相同的问题。解决它的方法是嵌套TextBlock远离的一层Grid,上面有过渡,例如第二层Grid

发生的情况是过渡对其每个子级应用一个变换,但在动画完成之前,它们可能拥有的任何变换都会被临时替换,从而在随后应用原始变换时导致令人讨厌的“捕捉”。

在以下示例中,将运行转换,替换TextBlock' 的转换,然后在转换结束后应用原始转换。您会看到“快照”:

<Grid Style="{StaticResource LayoutRootStyle}">
    <TextBlock Text="Header" Style="{StaticResource PageHeaderTextStyle}"
        Margin="0,0,0,40"/>
</Grid>

在下一个示例中,转换运行并将转换应用于Grid,而TextBlock' 的转换不受影响。没有“快照”:

<Grid Style="{StaticResource LayoutRootStyle}">
    <Grid>
        <TextBlock Text="Header" Style="{StaticResource PageHeaderTextStyle}"
            Margin="0,0,0,40"/>
    </Grid>
</Grid>

希望这可以帮助!

于 2013-01-17T02:13:55.930 回答
0

从您的话看来,EntranceThemeTransition 似乎为您的 TextBlock 的变换设置了动画。最简单的解决方法是将入口过渡放在父元素上,或者将变换放在父元素上。你可以简单地将你的 TextBlock 包装在一个网格中来做到这一点。

于 2012-11-18T06:47:05.440 回答