C# 在哪里可以找到列出控件中所有状态的属性?

C# 在哪里可以找到列出控件中所有状态的属性?,c#,wpf,controls,visualstates,C#,Wpf,Controls,Visualstates,我正在查看winrt项目的模板,其“后退”按钮的样式如下: <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="CommonStates"> <VisualState x:Name="Normal" /> <VisualState x:Name="PointerOver"> ... </

我正在查看winrt项目的模板,其“后退”按钮的样式如下:

<VisualStateManager.VisualStateGroups>
    <VisualStateGroup x:Name="CommonStates">
        <VisualState x:Name="Normal" />
        <VisualState x:Name="PointerOver">
            ...
        </VisualState>
        <VisualState x:Name="Pressed">
           ...
        </VisualState>
        <VisualState x:Name="Disabled">
            ...
        </VisualState>
    </VisualStateGroup>
    <VisualStateGroup x:Name="FocusStates">
        <VisualState x:Name="Focused">
            ...
        </VisualState>
        <VisualState x:Name="Unfocused" />
        <VisualState x:Name="PointerFocused" />
    </VisualStateGroup>
</VisualStateManager.VisualStateGroups>

...
...
...
...
我假设上面的可视状态是按钮状态,但我无法确定在按钮对象上跟踪这些状态的位置,以及框架如何将状态绑定到可视状态


我一直在互联网上四处寻找,以获得更好的理解,但无济于事。请帮助我理解这一切是如何联系在一起的。我知道您可以从代码隐藏手动转到特定状态,但这里似乎缺少一个约定。

有一个属性列出控件状态

根据MSDN,控件作者必须提供
控件合同
,以便控件模板作者知道在模板中放置什么

控制合同有三个要素:

  • 控件逻辑使用的可视元素
  • 控件的状态以及每个状态所属的组
  • 视觉上影响控件的公共属性
可视元素和状态都作为类属性提供

[TemplatePart(Name = "XXX", Type = typeof(RepeatButton))]
[TemplatePart(Name = "YYY", Type = typeof(RepeatButton))]
[TemplateVisualState(Name = "Focused", GroupName = "FocusedStates")]
[TemplateVisualState(Name = "Unfocused", GroupName = "FocusedStates")]
你应该检查一下默认值,我想你要找的所有数据都会在那里

如果必须在运行时获取数据,则可以使用
反射
获取给定的类属性,如下所示:

System.Reflection.MemberInfo info = typeof(MyClass);
object[] attributes = info.GetCustomAttributes(true);

for (int i = 0; i < attributes.Length; i++)
{
  if (attributes[i] is TemplatePart || attributes[i] is TemplateVisualState)
  {
     System.Console.WriteLine(((TemplateVisualState) attributes[i]).Name);
  }   
}
System.Reflection.MemberInfo=typeof(MyClass);
object[]attributes=info.GetCustomAttributes(true);
for(int i=0;i
读这篇文章会让事情更清楚