WPF的示例(1)详细注解--故事板及触发器

 

<Grid>
        <StackPanel>
             <!-- StackPanel面版的背景色设置 -->
             <StackPanel.Background>
   <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">
   <GradientStop Color="#FFFFB5D6" Offset="0"/>
   <GradientStop Color="#F0087272" Offset="1"/>
  </LinearGradientBrush>
       </StackPanel.Background>
 
       <Canvas Width="400" Height="200" >
      <!-- Canvas面版的背景色设置 -->
        <Canvas.Background>
  <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">
   <GradientStop Color="#FFA6B5D6" Offset="0"/>
   <GradientStop Color="#FFE87272" Offset="1"/>
  </LinearGradientBrush>
 </Canvas.Background>
        
     <!-- 旋转时当背景的三个Rectangle位置坐标(分别从左到右) --> 
       <Rectangle Canvas.Top="80" Canvas.Left="50" Fill="Blue" Width="50" Height="50" Stroke="Black"
          StrokeThickness="5" Opacity="0.25" />
       <!-- Rectangle中代表的属性值含义:  Canvas.Top:Rectangle左上角到Canvas顶部的距离;Canvas.Left:Rectangle左上角到Canvas左边的距离;Fill:设置Rectangle内的填充色;Width:Rectangle的宽度;Height:Rectangle的高度;Stroke:Rectangle的边框颜色;StrokeThickness:Rectangle的边框粗细;Opacity:Rectangle的透明度 -->
       <Rectangle Canvas.Top="80" Canvas.Left="180" Fill="Blue" Width="50" Height="50" Stroke="Black"
          StrokeThickness="5" Opacity="0.25" />
       <Rectangle Canvas.Top="80" Canvas.Left="300" Fill="Blue" Width="50" Height="50" Stroke="Black"
          StrokeThickness="5" Opacity="0.25" />

    <!-- 表面旋转的三个Rectangle -->
       <Rectangle
          Canvas.Top="80" Canvas.Left="50" Fill="Blue"
          Width="50" Height="50" Stroke="Black"
          StrokeThickness="5">
      <!-- 使Rectangle变形 -->
          <Rectangle.RenderTransform>   
      <!-- RotateTransform使Rectangle旋转,并给这个要旋转的Rectangle起个名字,设置它的初始角度,及中心坐标 -->
          <RotateTransform x:Name="MyCenteredRotation"
              Angle="0" CenterX="25" CenterY="25" />
          </Rectangle.RenderTransform>
       </Rectangle>
       <Rectangle
          Canvas.Top="80" Canvas.Left="180" Fill="Blue"
          Width="50" Height="50" Stroke="Black"
          StrokeThickness="5">
          <Rectangle.RenderTransform>
            <RotateTransform x:Name="MyRotationAboutOrigin"
              Angle="0" CenterX="0" CenterY="0" />
          </Rectangle.RenderTransform>
       </Rectangle>
  
       <Rectangle
          Canvas.Top="80" Canvas.Left="300" Fill="Blue"
          Width="50" Height="50" Stroke="Black"
          StrokeThickness="5">
          <Rectangle.RenderTransform>
           <RotateTransform x:Name="MyAnimatedCenterRotation"
            Angle="0" CenterX="0" CenterY="0" />
         </Rectangle.RenderTransform>
       </Rectangle>  
     </Canvas>
 <!-- 控制部分 -->
     <StackPanel Orientation="Horizontal">  
          <!-- 四个控制按键 -->
        <Button Name="startButton" Content="Start" />
        <Button Name="pauseButton" Content="Pause" />   
        <Button Name="resumeButton" Content="Resume" />     
        <Button Name="stopButton" Content="Stop" /> 
        <!-- 触发器及故事板的组合 -->
        <StackPanel.Triggers>    
           <!-- 很好翻译了:在按键startButton被点击的时候触发 -->
           <EventTrigger SourceName="startButton" RoutedEvent="Button.Click">
              <!-- 事件触发以后做什么呢?由故事板来解决,它来产生动画效果。 -->
              <BeginStoryboard Name="myBeginStoryboard">
                 <!-- 瞧瞧!这个故事板里有几个”故事“, 有五个! -->
                 <Storyboard Name="myStoryboard">
                    <!-- 对!这就是一个故事。那么这个故事写的是什么呢? -->
                    <!-- 首先,故事的主角要找到,它是上面Rectangle的一个实例MyCenteredRotation。这个故事表现主角的那一个方面呢,那就是Angle.当然故事发生的时候在4秒内MyCenteredRotation的Angle由0度增长到360度,换言之就是旋转两圈。并且永远这样旋转下去(RepeatBehavior="Forever"),下面的故事雷同。-->
                    <DoubleAnimation Storyboard.TargetName="MyCenteredRotation"
                       Storyboard.TargetProperty="Angle"    
                       From="0" To="360" RepeatBehavior="Forever" Duration="0:0:4"/>

                    <DoubleAnimation Storyboard.TargetName="MyRotationAboutOrigin"
                       Storyboard.TargetProperty="Angle"    
                       From="0" To="360" RepeatBehavior="Forever" Duration="0:0:4"/>

     <!-- 大牌明星MyAnimatedCenterRotation有三场戏要拍 -->
                    <DoubleAnimation
                       Storyboard.TargetName="MyAnimatedCenterRotation"
                       Storyboard.TargetProperty="Angle"    
                       From="0" To="360" RepeatBehavior="Forever" Duration="0:0:4"/>
     <!-- 下面两场可是在同时进行哟! --> 
                     <DoubleAnimation Storyboard.TargetName="MyAnimatedCenterRotation"
                       Storyboard.TargetProperty="CenterX"    
                       From="0" To="50" RepeatBehavior="Forever" Duration="0:0:16"/>  
                    <DoubleAnimation Storyboard.TargetName="MyAnimatedCenterRotation"
                       Storyboard.TargetProperty="CenterY"    
                       From="0" To="50" RepeatBehavior="Forever" Duration="0:0:16"/>                        
                 </Storyboard>
              </BeginStoryboard>
          </EventTrigger>      
           
          <!-- 同理可证:pauseButton被点击的时候故事全部暂停 :PauseStoryboard -->
          <EventTrigger SourceName="pauseButton" RoutedEvent="Button.Click" >
             <PauseStoryboard BeginStoryboardName="myBeginStoryboard">
             </PauseStoryboard>
          </EventTrigger>   
          <!-- 同理可证:pauseButton被点击的时候故事全部重新开始 :ResumeStoryboard -->
          <EventTrigger RoutedEvent="Button.Click" SourceName="resumeButton">
             <ResumeStoryboard BeginStoryboardName="myBeginStoryboard">
             </ResumeStoryboard>
          </EventTrigger>  
          <!-- 同理可证:pauseButton被点击的时候故事全部重新完全停掉 :StopStoryboard -->    
          <EventTrigger RoutedEvent="Button.Click" SourceName="stopButton">
             <StopStoryboard BeginStoryboardName="myBeginStoryboard">
             </StopStoryboard>
          </EventTrigger>               
              
        </StackPanel.Triggers>       
      </StackPanel>
   </StackPanel>
    </Grid>

转载于:https://www.cnblogs.com/KivenLin/archive/2007/01/08/615189.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值