首先Silverlight/WPF是真的是擅长这类东西。框架人员做了很好的工程,使得xaml尽可能地灵活。
话虽这么说admittingly有很多的尝试,这些样的东西 像ResourceDictionaries,Triggers,Actions,Storyboards,动画(关键帧/ Double ...),模板,Styles 之前得到,但一旦你得到这些比喻其方式更容易。
继承人与一些引物的破败。
继承人的样本为了你把这些东西拉在一起
<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>
哇!感谢almog.ori提供了如此丰富的回复! – user118190 2010-06-20 07:44:46
我一直在整个下午都在苦苦挣扎!你的帖子正是我所需要的,差不多!你知道是否可以使用一个按钮来滑动面板进出,而不是需要两个?除此之外,这正是我所需要的,谢谢。 – 2013-03-03 19:16:26