什么是wpf中的视觉状态?任何人都知道如何开始理解和使用它?

时间:2011-04-12 12:49:09

标签: c# wpf xaml

wpf中的视觉状态是什么?谁知道如何开始理解和使用它?

也许就像一个完整的教程,因为我以前从未接触过视觉状态。或者只是一个简单的示例代码

是的,是的

3 个答案:

答案 0 :(得分:8)

WPF中的视觉状态是关于控制控件的外观。控制状态可能会发生变化,然后响应状态变化而出现控制变化。例如,如果按下/禁用/对焦控件,则每个状态可能具有不同的外观。有一个例子说明如何使用WPF的触发机制来改变控件here的外观;这将为您提供有关更改控件外观的一些一般背景信息。 WPF here上有一个很好的通用教程,对Visual State here有一个很好的解释。 有关更高级的用法,请参阅Microsoft在Visual State Manager here

上提供的信息

答案 1 :(得分:2)

视觉状态用于在控件的不同状态下更改wpf控件的外观,例如,在单选按钮的情况下,在聚焦时,单击或禁用时,它可能会显示不同,

视觉状态属于不同的视觉状态组,如

  1. CommonStates
  2. CheckStates
  3. FocusStates
  4. 主要使用的视觉状态是:

    1. 鼠标悬停
    2. 禁用
    3. 经过
    4. 未检查
    5. 不确定
    6. 聚焦
    7. 未聚焦
    8. PointerFocused
    9. 给出了单选按钮样式中使用的visualstate的示例

      <Style TargetType="RadioButton">
          <Setter Property="Background"
                  Value="Transparent" />
          <Setter Property="Foreground"
                  Value="{DynamicResource BlackBrush}" />
          <Setter Property="Padding"
                  Value="1,4,0,0" />
          <Setter Property="HorizontalAlignment"
                  Value="Stretch" />
          <Setter Property="Template">
              <Setter.Value>
                  <ControlTemplate TargetType="RadioButton">
                      <Border Background="{TemplateBinding Background}">
                          <vsm:VisualStateManager.VisualStateGroups>
                              <vsm:VisualStateGroup x:Name="CommonStates">
                                  <vsm:VisualState x:Name="Normal" >
                                      <Storyboard>
                                          <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundEllipse"
                                                                         Storyboard.TargetProperty="Stroke">
                                              <DiscreteObjectKeyFrame KeyTime="0"
                                                                      Value="{DynamicResource HpGray13Brush}" />
                                          </ObjectAnimationUsingKeyFrames>
                                      </Storyboard>
                                  </vsm:VisualState>
                                  <vsm:VisualState x:Name="MouseOver">
                                      <Storyboard>
      
                                          <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundEllipse"
                                                                         Storyboard.TargetProperty="Stroke">
                                              <DiscreteObjectKeyFrame KeyTime="0"
                                                                      Value="{DynamicResource HpGray15Brush}" />
                                          </ObjectAnimationUsingKeyFrames>
      
                                      </Storyboard>
                                  </vsm:VisualState>
                                  <vsm:VisualState x:Name="Pressed">
                                      <Storyboard>
      
                                          <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundEllipse"
                                                                         Storyboard.TargetProperty="Stroke">
                                              <DiscreteObjectKeyFrame KeyTime="0"
                                                                      Value="{DynamicResource GreenBrush}" />
                                          </ObjectAnimationUsingKeyFrames>
      
                                      </Storyboard>
                                  </vsm:VisualState>
                                  <vsm:VisualState x:Name="Disabled">
                                      <Storyboard>
      
                                          <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundEllipse"
                                                                         Storyboard.TargetProperty="Stroke">
                                              <DiscreteObjectKeyFrame KeyTime="0"
                                                                      Value="{DynamicResource HpGray1Brush}" />
                                          </ObjectAnimationUsingKeyFrames>
                                          <ObjectAnimationUsingKeyFrames Storyboard.TargetName="CheckGlyph"
                                                                         Storyboard.TargetProperty="Fill">
                                              <DiscreteObjectKeyFrame KeyTime="0"
                                                                      Value="{DynamicResource Gray1Brush}" />
                                          </ObjectAnimationUsingKeyFrames>
                                      </Storyboard>
                                  </vsm:VisualState>
                              </vsm:VisualStateGroup>
      

答案 2 :(得分:0)

Wpf中的可视状态正在响应一个描述的事件,同时控制一个或多个控件(一组属性)的外观,包括动画。最好使用Microsoft Blend了解。