【问题标题】:Rendering Offscreen Content On Windows Phone在 Windows Phone 上渲染屏幕外内容
【发布时间】:2011-10-24 13:40:37
【问题描述】:

基本上我有两倍于页面宽度的控件(例如网格)。

这个想法是为控件设置动画,使其向左滑动并显示看不见的一半 - 但它不会被渲染。

有没有办法强制离屏渲染或动态渲染(在动画播放时)?

提前致谢,

杰米

【问题讨论】:

  • 向我们展示你所拥有的,而不仅仅是描述它。它可以更轻松地帮助您确定具体问题,而不仅仅是推测。
  • 嗨,马特,我同意你的观点,但我无法访问代码(午餐时通过手机询问!),希望今晚能得到答复 - 如果没有,我会在我到家了:)谢谢

标签: .net silverlight xaml windows-phone-7


【解决方案1】:

实现此目的的一种方法是使用单个宽网格,并具有两个渲染变换(特别是 TranslateTransform)- 一个用于左侧内容,一个用于右侧内容。 “左侧”内容的 TranslateTransform X 值为 0,而右侧的 X 值为 480,有效地创建了一个双宽网格。要执行一个侧面,只需使用具有 -480 的双重动画的情节提要到两个变换的 X 值。

听起来有点复杂,但也不错,如果您需要更多详细信息,请告诉我!

XAML:

<Grid x:Name="LayoutRoot" Background="Transparent">
    <Grid.Resources>
        <Storyboard x:Key="SlideLeftStoryboard">
            <DoubleAnimation From="0" To="-480" Duration="0:0:0.5" Storyboard.TargetName="BlueTransform" Storyboard.TargetProperty="X">

            </DoubleAnimation>
            <DoubleAnimation From="480" To="0" Duration="0:0:0.5" Storyboard.TargetName="RedTransform" Storyboard.TargetProperty="X">

            </DoubleAnimation>
        </Storyboard>
        <Storyboard x:Key="SlideRightStoryboard">
            <DoubleAnimation From="-480" To="0" Duration="0:0:0.5" Storyboard.TargetName="BlueTransform" Storyboard.TargetProperty="X">

            </DoubleAnimation>
            <DoubleAnimation From="0" To="480" Duration="0:0:0.5" Storyboard.TargetName="RedTransform" Storyboard.TargetProperty="X">

            </DoubleAnimation>
        </Storyboard>
    </Grid.Resources>
    <Border Name="BlueBorder" Background="Blue">
        <Border.RenderTransform>
            <TranslateTransform x:Name="BlueTransform" X="0">

            </TranslateTransform>
        </Border.RenderTransform>
        <Button Click="SlideLeft_Click">
            <TextBlock>
                Slide Left
            </TextBlock>
        </Button>
    </Border>
    <Border Name="RedBorder" Background="Red">
        <Border.RenderTransform>
            <TranslateTransform x:Name="RedTransform" X="480">

            </TranslateTransform>
        </Border.RenderTransform>
        <Button Click="SlideRight_Click">
            <TextBlock>
                Slide Right
            </TextBlock>
        </Button>
    </Border>

</Grid>

代码背后:

public partial class MainPage : PhoneApplicationPage
{
    Storyboard slideLeftStoryboard;
    Storyboard slideRightStoryboard;
    // Constructor
    public MainPage()
    {
        InitializeComponent();
        this.Loaded += new RoutedEventHandler(MainPage_Loaded);
    }

    void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        slideLeftStoryboard = LayoutRoot.Resources["SlideLeftStoryboard"] as Storyboard;
        slideRightStoryboard = LayoutRoot.Resources["SlideRightStoryboard"] as Storyboard;
    }

    private void SlideLeft_Click(object sender, RoutedEventArgs e)
    {
        slideLeftStoryboard.Begin();
    }

    private void SlideRight_Click(object sender, RoutedEventArgs e)
    {
        slideRightStoryboard.Begin();
    }
}

【讨论】:

  • 我看到实际内容是滑动而不是网格(这是我最初做的)。使用 Grid.Resources 很有趣 - 将其全部放在页面资源中看起来更整洁!这实际上也是有道理的,考虑一下我试图滑动 LayoutRoot 并且我猜任何位于 LayoutRoot 根目录中的屏幕上的东西都不会被渲染?我想深夜会导致愚蠢的错误! - 不过今晚我会试一试,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-15
  • 2011-04-19
  • 1970-01-01
  • 2012-04-19
  • 2015-04-08
  • 1970-01-01
相关资源
最近更新 更多