ContextMenu 概觀
ContextMenu 類別代表使用內容特定 Menu 來公開功能的元素。 一般而言,使用者會按一下滑鼠右鍵,以在使用者介面 (UI) 中公開 ContextMenu。 本主題介紹 ContextMenu 元素,並提供其在 Extensible Application Markup Language (XAML) 和程式碼中的使用方式範例。
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>
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);
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)
將樣式套用至 ContextMenu
使用控制項 Style,您可以大幅變更 ContextMenu 的外觀和行為,而不需要撰寫自訂控制項。 除了設定視覺屬性之外,您也可以套用樣式至控制項的組件。 例如,您可以使用屬性,來變更控制項組件的行為,或者您可以將組件新增至 ContextMenu,或變更其版面配置。 下列範例顯示將樣式新增至 ContextMenu 控制項的數種方式。
第一個範例會定義稱為 SimpleSysResources
的樣式,它會顯示如何以您的樣式使用目前的系統設定。 此範例會將 MenuHighlightBrushKey 指派為 Background 色彩,並將 MenuTextBrushKey 指派為 ContextMenu 的 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>