【问题标题】:RenderTransform occurs after EntranceThemeTransition on a TextBlockRenderTransform 发生在 TextBlock 上的 EntranceThemeTransition 之后
【发布时间】:2012-11-17 23:12:47
【问题描述】:

我将EntranceThemeTransition 动画应用到TextBlockTextBlock 的样式为 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>

【问题讨论】:

    标签: xaml windows-8 microsoft-metro windows-runtime windows-store-apps


    【解决方案1】:

    我刚刚遇到了完全相同的问题。解决它的方法是嵌套TextBlockGrid 相隔一层并对其进行转换,例如第二个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>
    

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 嗨菲利普,感谢您的回复。我尝试将 TextBlock 放在 Grid 中并将 EntranceThemeTransition 应用于 Grid,但 TextBlock 上也会出现相同的效果。动画播放(将 TextBlock 滑入),当到达路径的末端时,应用 RenderTransform 并且 TextBlock “传送”到 RenderTransform 中定义的平移偏移量。
      • 如何将转换应用于 tb,但将转换应用于网格?
      • 不,同样的事情。我将动画放在 TextBlock 上,将 RenderTransform 放在 Grid 上,但同样的事情发生了。 TextBlock 滑入到位,然后捕捉到翻译点。
      • 另一个选项是只使用边距来调整文本块的位置。在您的情况下,您将设置 Margin="-2,8,2,-8"。
      • Filip,我会在有机会时尝试您的建议并进行相应更新。感谢您的回复。
      猜你喜欢
      • 2013-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多