ContextMenu 概觀
ContextMenu 類別代表利用內容相關 Menu 公開功能的項目。 使用者通常都會透過按一下滑鼠右鍵的方式,在user interface (UI) 中公開 ContextMenu。 本主題將介紹 ContextMenu 項目,並提供如何在Extensible Application Markup Language (XAML) 和程式碼中使用該項目的範例。
這個主題包含下列章節。
- ContextMenu 控制項
- 建立 ContextMenu
- 將樣式套用至 ContextMenu
- 相關主題
ContextMenu 控制項
ContextMenu 會附加至特定控制項。 ContextMenu 項目可讓您對使用者顯示一份項目清單,其中的項目指定了與特定控制項 (例如 Button) 相關聯的命令或選項。 使用者以滑鼠右鍵按一下該控制項即可顯示功能表。 一般來說,按一下 MenuItem 會開啟子功能表,或使應用程式執行命令。
建立 ContextMenu
下列範例顯示如何建立具有子功能表的 ContextMenu。 ContextMenu 控制項會附加到按鈕控制項。
<Button Name="cmButton" Height="30">
Button with Context Menu
<Button.ContextMenu>
<ContextMenu Name="cm" Opened="OnOpened" Closed="OnClosed" StaysOpen="true">
<MenuItem Header="File"/>
<MenuItem Header="Save"/>
<MenuItem Header="SaveAs"/>
<MenuItem Header="Recent Files">
<MenuItem Header="ReadMe.txt"/>
<MenuItem Header="Schedule.xls"/>
</MenuItem>
</ContextMenu>
</Button.ContextMenu>
</Button>
Dim btn As New Button()
Dim contextmenu As New ContextMenu()
Dim mi As New MenuItem()
Dim mia As New MenuItem()
btn.Background = Brushes.Red
btn.Height = 30
btn.Content = "Created with Visual Basic."
mi.Header = ("Item 1")
contextmenu.Items.Add(mi)
mia.Header = ("Item 2")
contextmenu.Items.Add(mia)
btn.ContextMenu = (contextmenu)
cv2.Children.Add(btn)
btn = new Button();
btn.Content = "Created with C#";
contextmenu = new ContextMenu();
btn.ContextMenu = contextmenu;
mi = new MenuItem();
mi.Header = "File";
mia = new MenuItem();
mia.Header = "New";
mi.Items.Add(mia);
mib = new MenuItem();
mib.Header = "Open";
mi.Items.Add(mib);
mib1 = new MenuItem();
mib1.Header = "Recently Opened";
mib.Items.Add(mib1);
mib1a = new MenuItem();
mib1a.Header = "Text.xaml";
mib1.Items.Add(mib1a);
contextmenu.Items.Add(mi);
cv2.Children.Add(btn);
將樣式套用至 ContextMenu
藉由使用控制項 Style,您可以動態變更 ContextMenu 的外觀和行為,而不需要撰寫自訂控制項。 除了設定視覺屬性之外,您也可以將樣式套用到控制項的各部分。 例如,您可以使用屬性變更控制項各部分的行為,也可以增加 ContextMenu 的部分或變更其配置。 下列範例顯示將樣式加入到 ContextMenu 控制項的幾種方式。
第一個範例會定義一個名為 SimpleSysResources 的樣式,顯示如何在樣式中使用目前的系統設定。 這個範例將 MenuHighlightBrushKey 指派為 ContextMenu 的 Background 色彩,並將 MenuTextBrushKey 指派為其 Foreground 色彩。
<Style x:Key="SimpleSysResources" TargetType="{x:Type MenuItem}">
<Setter Property = "Background" Value=
"{DynamicResource {x:Static SystemColors.MenuHighlightBrushKey}}"/>
<Setter Property = "Foreground" Value=
"{DynamicResource {x:Static SystemColors.MenuTextBrushKey}}"/>
</Style>
下列範例使用 Trigger 項目變更 Menu 的外觀,以回應 ContextMenu 上引發的事件。 當使用者將滑鼠移到功能表上方時,ContextMenu 項目的外觀就會改變。
<Style x:Key="Triggers" TargetType="{x:Type MenuItem}">
<Style.Triggers>
<Trigger Property="MenuItem.IsMouseOver" Value="true">
<Setter Property = "FontSize" Value="16"/>
<Setter Property = "FontStyle" Value="Italic"/>
<Setter Property = "Foreground" Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>