xaml中VisualState的使用

发布时间:2024-12-22 16:33

耳机使用中的充电宝使用注意事项 #生活技巧# #数码产品使用技巧# #耳机使用心得#

原文网址: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绑定(三)任意事件的Command
ResourceDictionary.Source 属性
WPF基础(十九)x:key、x:name、name的区别?
WPF 用装饰器制作抽屉效果
个人生活小助手设计 毕业论文.docx
WPF控件与布局详解
【WPF学习手记】制作二维码和条形码
quartz 中JobExecutionContext的使用
shell 中的EOF使用
python中使用

随便看看