Animating Windows Phone Listboxes: Listing 3

XAML showing images' visual states.

<DataTemplate x:Key="ItemTemplate">
    <Grid Margin="12,0,0,12">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <VisualStateManager.CustomVisualStateManager>
            <ec:ExtendedVisualStateManager/>
        </VisualStateManager.CustomVisualStateManager>
        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="ImageStates">
            	<VisualStateGroup.Transitions>
            		<VisualTransition GeneratedDuration="0:0:2"/>
            		<VisualTransition GeneratedDuration="0:0:2" To="ImageLoaded">
            			<Storyboard>
            				<DoubleAnimation 
     Duration="0:0:1" To="0" 
     Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationY)" 
     Storyboard.TargetName="DisplayImage"/>
            				<DoubleAnimation 
     BeginTime="0:0:1" Duration="0:0:2" To="0" 
     Storyboard.TargetProperty="(UIElement.Opacity)" 
     Storyboard.TargetName="PlaceholderBorder"/>
            			</Storyboard>
            		</VisualTransition>
            	</VisualStateGroup.Transitions>
            	<VisualState x:Name="ImageLoaded">
            		<Storyboard>
            			<DoubleAnimation 
     Duration="0" To="0" 
     Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationY)" 
     Storyboard.TargetName="DisplayImage" d:IsOptimized="True"/>
            			<DoubleAnimation 
     Duration="0" To="0" Storyboard.TargetProperty="(UIElement.Opacity)" 
     Storyboard.TargetName="PlaceholderBorder" d:IsOptimized="True"/>
            		</Storyboard>
            	</VisualState>
            	<VisualState x:Name="ImageFailedToLoad">
            		<Storyboard>
            			<ColorAnimation 
     Duration="0" To="Red" 
     Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" 
     Storyboard.TargetName="PlaceholderBorder" d:IsOptimized="True"/>
            		</Storyboard>
            	</VisualState>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>
        <Border x:Name="PlaceholderBorder" Width="100"
            Height="100" Background="Gray" >
            <Border.Projection>
            	<PlaneProjection CenterOfRotationX="0" CenterOfRotationY="0"/>
            </Border.Projection>
        </Border>
        <Image x:Name="DisplayImage"  Width="100"
                Height="100"
                Source="{Binding ImageUrl}" >
            <Image.Projection>
                <PlaneProjection RotationY="90" CenterOfRotationX="0" CenterOfRotationY="0" />
            </Image.Projection>
        </Image>
        <TextBlock Grid.Column="1"
                    Text="{Binding Title}"
                    Style="{StaticResource PhoneTextLargeStyle}" />
    </Grid>
</DataTemplate>

About the Author

Nick Randolph runs Built to Roam, a consulting company that specializes in training, mentoring and assisting other companies build mobile applications. With a heritage in rich client applications for both the desktop and a variety of mobile platforms, Nick currently presents, writes and educates on the Windows Phone platform.

comments powered by Disqus

Featured

  • VS Code Keeps Eye on Costs in v1.126 Update

    Visual Studio Code 1.126 adds session-level Copilot cost information, continuing Microsoft's recent focus on helping developers monitor and manage usage-based GitHub Copilot billing.

  • Open VSX 1.0.0 Puts Focus on Open Extension Registry for VS Code Ecosystem

    Eclipse Open VSX has reached 1.0.0, highlighting its role as a vendor-neutral registry for VS Code-compatible extensions.

  • Infragistics Puts MCP Toolchain at Center of Ultimate 26.1

    Infragistics Ultimate 26.1 introduces the Ignite UI Enterprise MCP toolchain for AI-assisted app development across Angular, React, Web Components and Blazor.

  • VS Code 1.125 Adds Copilot Spend Meter After Billing Shock

    VS Code 1.125 adds in-editor visibility into additional Copilot budget usage as GitHub's AI-credit billing model continues to draw developer scrutiny.

Subscribe on YouTube