xaml中VisualState的使用
耳机使用中的充电宝使用注意事项 #生活技巧# #数码产品使用技巧# #耳机使用心得#
原文网址:http://www.cnblogs.com/jason_zhou/archive/2012/06/12/2546485.html
VisualStateManager用于管理控件的状态以及用于状态过渡的逻辑,一般放在controltemplate里面。
xmal中:
< templateRoot > 
    < VisualStateManager.VisualStateGroups > 
     oneOrMoreVisualStateGroups
    </ VisualStateManager.VisualStateGroups > 
 </ templateRoot > 
一个<VisualStateManager>的结构如下:
------------------------------------------------------------------------------------------------------------------------------------
<VisualStateManager.VisualStateGroups> 状态组组合
<VisualStateGroup> 设置单个的状态组
             <VisualStateGroup.Transitions>  设置单个的状态组里不同状态切换时的动画时间
              <VisualState>    设置单个的状态的动画效果
         </VisualStateGroup>
</VisualStateManager.VisualStateGroups>
-------------------------------------------------------------------------------------------------------------------------------------
以下的例子创建了一个VisualStateManager,里面包含了3种状态情形(VisualState:Normal,Mouseover,Pressed)
此外创建了一个button引用这个,当鼠标放在这个button上时,button会变大,当鼠标按下这个button时,button颜色会改变
xmal中:
代码
< UserControl  x:Class ="VisualStateManager_Sample.MainPage" 
     xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d ="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc ="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     mc:Ignorable ="d" 
     d:DesignHeight ="300"  d:DesignWidth ="400" > < Grid  x:Name ="LayoutRoot"  Background ="White" > 
          < Grid.Resources > 
              <!-- Style-包含-ControlTemplate- 包含-VisualStateManager --> 
              < Style  x:Key ="ButtonTemplate"  TargetType ="Button" > 
                  < Setter  Property ="Template" > 
                      < Setter.Value > 
                          < ControlTemplate  TargetType ="Button" > 
                             <!--设置控件的Width,Height,Opacity,BorderThickness --> 
                              < Border  x:Name ="Button_RootElement"  Width ="500"  Height ="100"  Opacity ="1"  BorderThickness ="2" > 
                                  < VisualStateManager.VisualStateGroups > 
                                      <!-- VisualStateGroup - 视觉状态组,包含CommonStates和FocusStates                       
                             CommonStates 包括: Normal, MouseOver, Pressed, Disabled四个VisualState
                             FocusStates 包括: Unfocused, Focused两个VisualState --> < VisualStateGroup  x:Name ="CommonStates" > <!-- 设置视觉状态组改变时的动画时间 --> 
                                          < VisualStateGroup.Transitions > 
                                              <!-- Take 0.3 second from Normal state to trasition to the MouseOver state. --> 
                                              < VisualTransition  From ="Normal"  To ="MouseOver"  GeneratedDuration ="0:0:0.3" /> <!-- Take 0.2 second from MouseOver state to trasition to the Normal state. --> 
                                              < VisualTransition  From ="MouseOver"  To ="Normal"  GeneratedDuration ="0:0:0.2" /> <!-- Take 0.2 second from MouseOver state to trasition to the Pressed state. --> 
                                              < VisualTransition  From ="MouseOver"  To ="Pressed"  GeneratedDuration ="0:0:0.2" /> <!-- Take 0.2 second from Pressed state to trasition to the MouseOver state. --> 
                                              < VisualTransition  From ="Pressed"  To ="MouseOver"  GeneratedDuration ="0:0:0.2" /> </ VisualStateGroup.Transitions > <!-- 3个VisualState,第一个VisualState为Normal --> 
                                          < VisualState  x:Name ="Normal"   /> 
<!-- Change the button Width and Height when the mouse is over the button.
                                         分别设置Button_RootElement下的Width和Height属性,鼠标放在button上时,button会变大 --> 
                                          < VisualState  x:Name ="MouseOver" > 
                                              < Storyboard > 
                                                  < DoubleAnimation  Storyboard.TargetName ="Button_RootElement"  
                                                  Storyboard.TargetProperty ="Width"  To ="600"   /> 
                                                  < DoubleAnimation  Storyboard.TargetName ="Button_RootElement"  
                                                  Storyboard.TargetProperty ="Height"  To ="120"   /> 
                                              </ Storyboard >                                           
                                          </ VisualState > <!-- Change the BackgroundBrush背景色, BackgroundBrush边框色, Opacity when the button is pressed. --> 
                                          < VisualState  x:Name ="Pressed" > 
                                              < Storyboard > 
                                                  < DoubleAnimation  Storyboard.TargetName ="Button_RootElement"  
                                                  Storyboard.TargetProperty ="Opacity"  To ="0.8"   /> 
                                                  < ColorAnimation  Storyboard.TargetName ="BackgroundBrush"  
                                                  Storyboard.TargetProperty ="Color"  To ="LightSkyBlue"   /> 
                                                  < ColorAnimation  Storyboard.TargetName ="BorderBrush"  
                                                  Storyboard.TargetProperty ="Color"  To ="Blue"   /> 
                                               </ Storyboard > 
                                          </ VisualState > </ VisualStateGroup > 
                                  </ VisualStateManager.VisualStateGroups > <!-- 内容设置. --> 
                                      < ContentPresenter                                  
                                           HorizontalAlignment =" {TemplateBinding HorizontalContentAlignment} " 
                                          VerticalAlignment =" {TemplateBinding VerticalContentAlignment} " /> 
                                  <!-- 背景色设置. --> 
                                     < Border.Background > 
                                            < SolidColorBrush  x:Name ="BackgroundBrush"  Color ="Gray" /> 
                                     </ Border.Background > 
                                  <!-- 边框颜色设置. --> 
                                     < Border.BorderBrush > 
                                          < SolidColorBrush  x:Name ="BorderBrush"  Color ="Black" /> 
                                     </ Border.BorderBrush > </ Border >                          
                          </ ControlTemplate > 
                      </ Setter.Value > 
                  </ Setter > 
              </ Style > 
           </ Grid.Resources > 
 
          <!-- button引用ButtonTemplate模板. --> 
          < Button  Style =" {StaticResource ButtonTemplate} "  
              HorizontalAlignment ="Center"  VerticalAlignment ="Center"              
             Content ="I'm a Button"   /> </ Grid > 
 </ UserControl > 
界面如下(由于是截屏,鼠标不可见)
1)button初始化时

2)鼠标在button时

3)当鼠标点击时

网址:xaml中VisualState的使用 https://www.yuejiaxmz.com/news/view/540154
相关内容
MVVM中轻松实现Command绑定(三)任意事件的CommandResourceDictionary.Source 属性
WPF基础(十九)x:key、x:name、name的区别?
WPF 用装饰器制作抽屉效果
个人生活小助手设计 毕业论文.docx
WPF控件与布局详解
【WPF学习手记】制作二维码和条形码
quartz 中JobExecutionContext的使用
shell 中的EOF使用
python中使用

