2013-07-14 47 views
1

我一直在尋找的模板進行的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> 

我假設上述VisualStates是按鈕的國家,但我想不通的地方,這是跟蹤按鈕對象以及框架如何將狀態綁定到可視狀態。

我一直在尋找所有的互聯網,以獲得更好的理解,但無濟於事。請幫我理解這是如何結合在一起的。我知道你可以從後面的代碼手動轉到特定的狀態,但這裏似乎有一個我缺少的約定。

回答

2

還有屬性列出了一個控件狀態。

根據MSDN,控制作者必須提供一個control contract,以便ControlTemplate作者知道要在模板中放置什麼。

控制合同有三個要素:

  • ,所述控制的邏輯使用的可視元素。
  • 控件的狀態以及每個狀態所屬的組的狀態。
  • 可視化影響控件的公共屬性。

兩個視覺元素和狀態設置爲Class Attributes

[TemplatePart(Name = "XXX", Type = typeof(RepeatButton))] 
[TemplatePart(Name = "YYY", Type = typeof(RepeatButton))] 
[TemplateVisualState(Name = "Focused", GroupName = "FocusedStates")] 
[TemplateVisualState(Name = "Unfocused", GroupName = "FocusedStates")] 

你應該去在默認Control Styles and Templates我認爲你正在尋找的DAT會在那裏。

如果你必須得到在運行時的數據,那麼你可以使用Reflection獲得一個給定的類屬性那樣:

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); 
    } 
} 

閱讀本MSDN Article它會使事情更清晰

相關問題