基本上我有两倍于页面宽度的控件(比如Grid)。
这个想法是为了让控件具有动画效果,这样它就会向左滑动,看不见的那一半就会显示出来--但不会被渲染。
有没有办法强制屏幕外渲染或动态渲染(当动画正在播放时)?
提前谢谢你,
杰米
发布于 2011-10-24 21:53:57
要做到这一点,一种方法是有一个单一的宽网格,并有两个呈现转换(特别是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();
}
}
https://stackoverflow.com/questions/7876515
复制相似问题