Search code examples
silverlightxamlexpression-blend

Silverlight Project - Slide-in and out Panel - How?


I don't know what exactly this feature is, but I would like to simulate this in my Silverlight project. I am a C# developer and am moving to Silverlight and Expression Studio (Blend) for richer UX. Let's say I have some user controls and would like them to come into the screen (slide-in and out) as shown in the following site I found:

http://www.templatemonster.com/silverlight-templates/28722.html

On the menu, as one clicks on the menu item, the 'screen' slides to the left and then a new 'screen' slides in from the left to right.

I really want to learn this stuff, but don't know what these 'features' are called? For example what are these 'screens' called in the xaml world? Also, what is the 'slide-in/out' called in the xaml world? Can someone point me to a good article/whitepaper?

Thanks in advance for any advice.


Solution

  • Firstly Silverlight/WPF is really good at this kind of stuff. The framework guys did a great job engineering xaml to be as flexible as possible.

    That being said admittingly there’s a lot to get before attempting these sort of things like ResourceDictionaries, Triggers, Actions, Storyboards, Animation (Keyframe/Double...) , Templating, Styles but once you get these metaphors its way easier.

    Heres the rundown with some primers.

    Heres a sample for you pulling this stuff together.

    <Grid x:Name="LayoutRoot">
        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="CentrePanelStates">
                <VisualStateGroup.Transitions>
                    <VisualTransition GeneratedDuration="00:00:00">
                        <Storyboard>
                            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetName="grid" Storyboard.TargetProperty="(FrameworkElement.Width)">
                                <EasingDoubleKeyFrame KeyTime="00:00:00" Value="350"/>
                            </DoubleAnimationUsingKeyFrames>
                        </Storyboard>
                    </VisualTransition>
                    <VisualTransition GeneratedDuration="00:00:00.3000000" To="Open">
                        <Storyboard>
                            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="grid" Storyboard.TargetProperty="(FrameworkElement.Width)">
                                <EasingDoubleKeyFrame KeyTime="00:00:00" Value="350">
                                    <EasingDoubleKeyFrame.EasingFunction>
                                        <PowerEase EasingMode="EaseIn"/>
                                    </EasingDoubleKeyFrame.EasingFunction>
                                </EasingDoubleKeyFrame>
                                <EasingDoubleKeyFrame KeyTime="00:00:00.6000000" Value="800">
                                    <EasingDoubleKeyFrame.EasingFunction>
                                        <QuarticEase EasingMode="EaseInOut"/>
                                    </EasingDoubleKeyFrame.EasingFunction>
                                </EasingDoubleKeyFrame>
                            </DoubleAnimationUsingKeyFrames>
                        </Storyboard>
                    </VisualTransition>
                    <VisualTransition From="Open" GeneratedDuration="00:00:00.3000000" To="Closed">
                        <VisualTransition.GeneratedEasingFunction>
                            <BounceEase EasingMode="EaseOut"/>
                        </VisualTransition.GeneratedEasingFunction>
                        <Storyboard>
                            <DoubleAnimation Duration="00:00:00.6000000" Storyboard.TargetName="grid" Storyboard.TargetProperty="(FrameworkElement.Width)" BeginTime="00:00:00">
                                <DoubleAnimation.EasingFunction>
                                    <QuarticEase EasingMode="EaseInOut"/>
                                </DoubleAnimation.EasingFunction>
                            </DoubleAnimation>
                        </Storyboard>
                    </VisualTransition>
                </VisualStateGroup.Transitions>
                <VisualState x:Name="Open">
                    <Storyboard>
                        <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetName="grid" Storyboard.TargetProperty="(FrameworkElement.Width)">
                            <EasingDoubleKeyFrame KeyTime="00:00:00" Value="800"/>
                        </DoubleAnimationUsingKeyFrames>
                    </Storyboard>
                </VisualState>
                <VisualState x:Name="Closed"/>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>
        <Rectangle VerticalAlignment="Stretch" 
                   HorizontalAlignment="Stretch"
                   Fill="#A1808080" />
        <Grid Name="CentrePanel" VerticalAlignment="Center" HorizontalAlignment="Center" Width="800" Height="500">
            <Border CornerRadius="3"
                    Background="LightGray" HorizontalAlignment="Left">
                <Grid x:Name="grid" Width="350" Margin="2">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="*" />
                        <RowDefinition Height="40" />
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="350" />
                        <ColumnDefinition Width="*" />
                    </Grid.ColumnDefinitions>
             
                    <Rectangle Fill="Beige" /> 
                    <Rectangle Grid.Column="1" Fill="#FFDDDCF5" />
    
                    <Button  
                        Content="Close"  
                        Width="79"
                        HorizontalAlignment="Left" Margin="94,130,0,0" Height="33" VerticalAlignment="Top" >
                        <i:Interaction.Triggers>
                            <i:EventTrigger EventName="Click">
                                <ic:GoToStateAction StateName="Closed"/>
                            </i:EventTrigger>
                        </i:Interaction.Triggers>
                    </Button>   
                
                    <Button  Content="Open" Width="81"
                        HorizontalAlignment="Left" Margin="92,85,0,0" Height="32" VerticalAlignment="Top" >
                        <i:Interaction.Triggers>
                            <i:EventTrigger EventName="Click">
                                <ic:GoToStateAction StateName="Open"/>
                            </i:EventTrigger>
                        </i:Interaction.Triggers>
                    </Button>
                </Grid> 
            
            </Border>
        </Grid>        
        
           
    </Grid>