SimpleMenu 及 SimpleMenuItem
功能表是一種項目集合控制項,會以階層方式來組織與命令和事件處理常式相關的元素。您可以在 Microsoft Expression Blend 中放置內容,方法是按兩下功能表,然後在其中繪製元素 (例如矩形)。此外,也可以用滑鼠右鍵按一下 [物件與時間軸] 下的功能表,然後按一下 [新增 SimpleMenuItem] 將個別項目新增至集合,或按一下 [將 ItemsSource 繫結至資料] 產生某個資料來源中之 [MenuItem] 元素的集合。若要新增第二層功能表項目,您可以用滑鼠右鍵按一下 [物件與時間軸] 下的功能表項目,然後按一下 [新增 SimpleMenuItem],或從 [資產庫] 的 [本機樣式] 索引標籤中新增自訂功能表項目。
您可以編輯功能表項目的文字,方法是以滑鼠右鍵按一下 [物件與時間軸] 下的功能表項目,然後按一下 [編輯文字],也可以按兩下功能表項目使之變為作用中狀態,然後在其中繪製控制項。若要在畫板上檢視功能表項目下已展開的子功能表項目,您可以用滑鼠右鍵按一下 [物件與時間軸] 下的父功能表項目,然後按一下 [展開 MenuItem]。
新增兩個項目和一個分隔符號之後的 SimpleMenu 控制項的畫板檢視
深入控制項範本
SimpleMenu 控制項範本由下列項目組成:
Grid 面板:在功能表內用來容納多個子項目。Grid 可讓應用程式使用者介面 (UI) 設計師輕鬆地將更多元素新增至範本。
Border 元素:此元素有 BorderThickness 屬性,可以透過範本繫結至套用此範本之功能表控制項的 BorderThickness 屬性。
StackPanel:位於 Grid 元素內,用來配置功能表項目。根據預設,StackPanel 的 Orientation 屬性會設為 Horizontal。
SimpleMenuItem 控制項範本由下列項目組成:
Grid 面板:在功能表項目內用來容納多個子項目。Grid 可讓設計師更輕鬆地將更多元素新增至範本。此 [Grid] 面板使用大小共用的概念,可讓功能表中所有的功能表項目寬度都相同。
名稱為 Icon 的 ContentPresenter 元素:繫結至套用此範本之功能表項目的 Icon 屬性。
名稱為 GlyphPanel 的 Grid 面板:當功能表項目為可核取項目時用來顯示核取記號。根據預設,[圖像] 元素會呈摺疊狀態,但可以使用 IsChecked 觸發程序來顯示。
名稱為 HeaderHost 的 ContentPresenter 元素:繫結至套用此範本之功能表項目的 Header 屬性。此繫結是在 HeaderHost 元素的 ContentSource 屬性中設定。
名稱為 ArrowPanel 的 Grid 面板:提供一種展開功能表項目的方法。根據預設,ArrowPanel 會呈摺疊狀態,但可以使用 Role = SubmenuHeader 觸發程序來顯示,此觸發程序會將功能表項目識別為子功能表標題 (具有子功能表項目的第二層或更低層功能表項目)。
名稱為 SubMenuPopup 的快顯元素:用來容納任何現有的子功能表項目。這些功能表項目都放在一個標記為 [項目載體] 的 StackPanel 元素中,讓此功能表項目知道要將子功能表項目放在何處。若要以不同方式排列功能表項目,可使用不同的版面配置面板 (例如 WrapPanel),方法是用滑鼠右鍵按一下 [物件與時間軸] 下的 StackPanel 元素,指向 [變更版面配置類型],然後選取面板。
物件檢視:SimpleMenu 控制項 (左) 及 SimpleMenuItem 控制項 (右) 的基本部分 (範本)
回到頁首
使用屬性觸發程序
控制項範本中的屬性觸發程序,可讓控制項回應屬性變更。您可以在 [互動] 面板中,按一下 [觸發程序] 底下的項目,檢視觸發程序啟動時變更的屬性。例如,在功能表項目的範本中,當 IsChecked 屬性為 True 時,表示套用範本的功能表項目是可核取項目,因此觸發程序會使 GlyphPanel 元素顯示。
回到頁首
使用筆刷
SimpleMenu 及 SimpleMenuItem 範本會使用 SimpleStyles.xaml 資源字典中的下列筆刷資源:
功能表的 Background 屬性是使用 [LightBrush] 來設定,但當 IsEnabled 為 False 時,則是使用 [DisabledBackgroundBrush] 來設定。
功能表的 BorderBrush 屬性是使用 [NormalBorderBrush] 來設定,但當 IsEnabled 為 False 時,則是使用 [DisabledBorderBrush] 來設定。
SubMenuBorder 元素的 Background 屬性是使用 [WindowBackgroundBrush] 來設定。
SubMenuBorder 元素的 BorderBrush 屬性是使用 [SolidBorderBrush] 來設定。
此外,範本會使用系統色彩繫結,讓控制項能夠使用系統預設值。在許多情況中,您可能會想要變更這些筆刷,以便建立獨特的設計。您可以編輯控制系統色彩的觸發程序,以達到此目的。
回到頁首
最佳作法與設計方針
一般而言,如果您希望設計師在控制項上新增更多視覺元素,請使用 Grid 控制項作為範本的根。Expression Blend 會搜尋類似 Grid 控制項的版面配置面板,並且將它設為預設啟用,讓新增至畫板的新元素成為版面配置面板的子元素。
快顯控制項會重疊在其他任何控制項的上方呈現。這通常是功能表所需要的。快顯控制項本身具有邏輯,可設定相對於父控制項的位移,例如將 Placement 屬性設為 "Right"。在功能表的情況中,功能表的展開是受與父控制項的繫結所控制。為了讓功能表能正確展開,必須保留此繫結。
功能表項目範本的根 Grid 面板使用大小共用的概念,可讓功能表中所有功能表項目的寬度都相同。若要變更此行為,必須在 [XAML] 檢視中修改 SharedSizeGroup 屬性,因為 Expression Blend 不會在 [屬性] 面板中顯示此屬性。在大部分的情況中,您不需要修改 SharedSizeGroup,因為它可讓功能表適當地調整大小。變更功能表項目外觀的最佳作法是,在功能表項目範本的根 Grid 面板中繪製元素,而非重新排列欄或內容。
部分功能表項目範本觸發程序可使用名為 Role 的屬性。「角色」的設定取決於功能表項目在功能表階層中的層級。若修改功能表項目範本,您可能會想要保留角色觸發程序。實際系統 MenuItem 控制項所用的範本比 SimpleMenuItem 複雜許多。MenuItem 控制項範本會使用樣式,根據功能表項目的角色,在不同的控制項範本間切換。SimpleMenuItem 使用單一範本來達成此效果,因此較容易編輯。
若要編輯 SimpleMenuItem 範本,請按一下 [資源] 面板中 [SimpleMenuItem] 樣式旁的 [編輯資源] 按鈕。然後,在樣式的編輯模式下,以滑鼠右鍵按一下 [物件與時間軸] 下的 [樣式],指向 [編輯控制項組件 (範本)],然後按一下 [編輯範本] 或 [編輯複本]。
回到頁首