WPF 內建了兩種菜單——Menu 和ContextMenu(上下文菜單)。
1. Menu
Menu 的項可以是任何東西,但是你應該使用MenuItem 以及Separator 對象。
<Menu x:Name="menu" Height="23.333" VerticalAlignment="Top"> <MenuItem Header="配置"> <MenuItem Header="_New..." IsCheckable="True"/> <MenuItem Header="_Open..." InputGestureText="ctrl+o" /> <Separator /> <MenuItem Header="Sen_d To"> <MenuItem Header="Mail Recipient" /> <MenuItem Header="My Documents" /> </MenuItem> </MenuItem> <MenuItem Header="_Edit"> </MenuItem> <MenuItem Header="_View"> </MenuItem> </Menu>
MenuItem 是帶頭的Items 控件(繼承自HeaderedItemControl),這個和帶頭的內容控件非常像。對於MenuItem,它的頭實際上是主對象(通常是文字,如圖4-18 所示)。如果Items 是子元素的話就會被作為子菜單顯示。和按鈕、標簽控件一樣,MenuItem 使用下划線前綴來支持訪問鍵(access key)。
Separator(分隔線)是一種簡單控件,當被放在MenuItem 里時,它會被 那樣以水平線渲染。
Icon——允許把任意類型的對象添加到Header 旁邊。Icon 對象會像Header 一樣被渲染,盡管它通常是一幅小圖片。
IsCheckable——讓MenuItem 的行為像一個CheckBox 控件。
InputGestureText——用一個相關的手勢(gesture)來標識一個項(最常見的就是鍵盤快捷方式,比如Ctrl+O)。
2.ContextMenu
它是一種保存MenuItem 和Separator 的簡單容器。但不能直接把ContextMenu 嵌入到一個元素樹中,必須通過一個適當的屬性把它加載到控件上,比如使用由
FrameworkElement 和FrameworkContentElement 定義的ContextMenu 屬性。當用戶在控件上右擊(或者按下Shift+F10)時,上下文菜單就被顯示出來。
<ListBox>
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="_File">
<MenuItem Header="_New..." />
<MenuItem Header="_Open..." />
<Separator />
<MenuItem Header="Sen_d To">
<MenuItem Header="Mail Recipient" />
<MenuItem Header="My Documents" />
</MenuItem>
</MenuItem>
</ContextMenu>
</ListBox.ContextMenu>
</ListBox>

3. TreeView
TreeView 是一種常用控件,它會用可展開和折疊的節點來分層顯示數據。
TreeView 和Menu 一樣,也是一種簡單控件。它可以包含任何項,並把這些項垂直排列。但是如果不用TreeViewItem 來填充它的話,TreeView 就沒意義
<TreeView>
<TreeViewItem Header="Desktop">
<TreeViewItem Header="Computer">
</TreeViewItem>
<TreeViewItem Header="Recycle Bin">
</TreeViewItem>
<TreeViewItem Header="Control Panel">
<TreeViewItem Header="Programs" />
<TreeViewItem Header="Security" />
</TreeViewItem>
<TreeViewItem Header="Network">
</TreeViewItem>
</TreeViewItem>
</TreeView>

TreeViewItem 有兩個方便的屬性IsExpanded 和IsSelected,還有4 個事件,分別對應於這兩個屬性的4種狀態:Expanded、Collapsed、Selected 和Unselected。TreeViewItem 同樣支持富鍵盤導航,加號和減號鍵可以展開或折疊一個項,箭頭方向鍵、Page Up、Page Down、Home 和End 鍵可以從一個項向另一個項移動焦點。
4. ToolBar
Separator 也被渲染為垂直線而不是水平線。由於ToolBar 重載了項的默認樣式,所以當它們被放在一個ToolBar 中時會自動變成大部分人所期望看到的樣子。
<ToolBar>
<Button>1</Button>
<Separator />
<ToggleButton>2</ToggleButton>
<Separator />
</ToolBar>
5. StatusBar
StatusBar 的行為就像Menu,它只是水平排列放它的項
StatusBar 為Separator 提供了一個控件模板,Separator 是作為垂直線被渲染的,就像它顯示在ToolBar 中一樣。StatusBar 中的項(除了Separator)是被隱式地包裝在一個StatusBarItem 中,但是你依然能顯式地進行包裝。
<StatusBar>
<Label>27 Items</Label>
<Separator />
<Label>Zoom</Label>
<ComboBox>
<ComboBoxItem>100%</ComboBoxItem>
<ComboBoxItem>85%</ComboBoxItem>
</ComboBox>
</StatusBar>
