Preface
According to the documentation, AdControls are hosted in a WebView control. For some reasons I was not able to figure out, WebView controls do not slide in when a page loads (or pop in, whatever the correct wording is). This means that your AdControl will not slide in neither.
Now imagine the following: You have created a great page including an AdControl. When the page is opened, all content slides in, except the AdControl. Would you like that? I do not.
Make AdControls Sliding
For all who are familiar with transitions and storyboards in XAML, this won’t bring much or any news. For those who are not, like I was when using AdControls the first time, this might help save some time.
The key is to add a Storyboard
to the page containing the AdControl. And luckily, there is a predefined ThemeAnimation
to do the pop in: the PopInThemeAnimation
. Here is a sample:
<Page.Resources> <Storyboard x:Name="PopInStoryboard"> <PopInThemeAnimation Storyboard.TargetName="AdControlPanel728x90" FromHorizontalOffset="120" SpeedRatio=".3"/> </Storyboard> </Page.Resources>
The Storyboard.TargetName
is the name of the control to animate. In case you use the AdControl configuration presented in the post Configure Microsoft Advertising Services’ AdControl using XAML/C#, make sure that you assign the name to the dynamically created AdControl. The class AdControlContainingPage
of the sample takes care of it.
The FromHorizontalOffset
“… sets the distance by which the target is translated in the horizontal direction when the animation is active” (description copied from MSDN online docs). Unfortunately, the docs don’t say what the reference point is. So you have to play around a little bit to make sure the AdControl slides in the same distances as the other controls do. In my sample, it was almost the left margin of topmost panel – but only almost, not always.
The SpeedRatio
is “… a finite value greater than 0 that specifies the rate at which time progresses for this timeline, relative to the speed of the timeline’s parent. If this timeline is a root timeline, specifies the default timeline speed. The value is expressed as a factor where 1 represents normal speed, 2 is double speed, 0.5 is half speed, and so on.” (description copied from MSDN online docs). In my experience, the value of 0.3 makes the AdControl slide in as fast as the other controls.
Adding the storyboard is only on half of the work. The other part is to make the storyboard run.
// Run storyboard if one exists. Storyboard storyboard = FindName("PopInStoryboard") as Storyboard; if (storyboard != null) { storyboard.Begin(); }
I put this code sniped into the LoadState
method of my AdControlContainingPage
base class, which is derived from LayoutAwarePage
. LoadState
is called when the page is about to be displayed. I think this is a good place to start transitions.
The AdControlContainingPage
is the base class of all pages containing AdControls. So I just have to define the StoryBoard
in the XAML, and I am done 🙂
Links
The AdControl animation is part of the sample code of the post Configure Microsoft Advertising Services’ AdControl using XAML/C#, where you can download the code.