- WPF 教程
- WPF - 首頁
- WPF - 概述
- WPF - 環境設定
- WPF - Hello World
- WPF - XAML 概述
- WPF - 元素樹
- WPF - 依賴屬性
- WPF - 路由事件
- WPF - 控制元件
- WPF - 佈局
- WPF - 佈局巢狀
- WPF - 輸入
- WPF - 命令列
- WPF - 資料繫結
- WPF - 資源
- WPF - 模板
- WPF - 樣式
- WPF - 觸發器
- WPF - 除錯
- WPF - 自定義控制元件
- WPF - 異常處理
- WPF - 本地化
- WPF - 互動
- WPF - 2D 圖形
- WPF - 3D 圖形
- WPF - 多媒體
- WPF 有用資源
- WPF - 快速指南
- WPF - 有用資源
- WPF - 討論
WPF - 上下文選單
ContextMenu 是一個彈出選單,它使控制元件能夠公開特定於控制元件上下文的函式。只要使用者介面從該元素內部請求上下文選單,它就會出現。ContextMenu 類的層次繼承如下:
ContextMenu 的常用屬性
| 序號 | 屬性及說明 |
|---|---|
| 1 | Background 獲取或設定提供控制元件背景的畫刷。(從 Control 繼承) |
| 2 | BorderThickness 獲取或設定控制元件的邊框粗細。(從 Control 繼承) |
| 3 | ContextMenu 獲取或設定應在使用者介面 (UI) 從該元素內部請求上下文選單時出現的上下文選單元素。(從 FrameworkElement 繼承。) |
| 4 | FontFamily 獲取或設定用於在控制元件中顯示文字的字型。(從 Control 繼承) |
| 5 | FontSize 獲取或設定此控制元件中文字的大小。(從 Control 繼承) |
| 6 | FontStyle 獲取或設定呈現文字的樣式。(從 Control 繼承) |
| 7 | FontWeight 獲取或設定指定字型的粗細。(從 Control 繼承) |
| 8 | Foreground 獲取或設定描述前景色顏色的畫刷。(從 Control 繼承) |
| 9 | GroupStyle 獲取定義每個組級別外觀的 GroupStyle 物件集合。(從 ItemsControl 繼承) |
| 10 | HasItems 獲取一個值,該值指示 ItemsControl 是否包含項。(從 ItemsControl 繼承。) |
| 11 | Height 獲取或設定 FrameworkElement 的建議高度。(從 FrameworkElement 繼承) |
| 12 | HorizontalAlignment 獲取或設定在 FrameworkElement 組合在佈局父級(例如面板或項控制元件)中時應用的水平對齊特徵。(從 FrameworkElement 繼承) |
| 13 | IsFocused 獲取一個值,該值確定此元素是否具有邏輯焦點。這是一個依賴屬性。(從 UIElement 繼承。) |
| 14 | IsOpen 獲取或設定一個值,該值指示 ContextMenu 是否可見。 |
| 15 | IsEnabled 獲取或設定一個值,指示使用者是否可以與控制元件互動。(從 Control 繼承) |
| 16 | ItemsSource 獲取或設定用於生成 ItemsControl 內容的物件源。(從 ItemsControl 繼承) |
| 17 | Margin 獲取或設定 FrameworkElement 的外邊距。(從 FrameworkElement 繼承) |
| 18 | Name 獲取或設定物件的標識名稱。當 XAML 處理器從 XAML 標記建立物件樹時,執行時程式碼可以透過此名稱引用 XAML 宣告的物件。(從 FrameworkElement 繼承) |
| 19 | Opacity 獲取或設定物件的透明度。(從 UIElement 繼承) |
| 20 | Style 獲取或設定在此物件佈局和呈現期間應用的例項樣式。(從 FrameworkElement 繼承) |
| 21 | VerticalAlignment 獲取或設定在 FrameworkElement 組合在父物件(例如面板或項控制元件)中時應用的垂直對齊特徵。(從 FrameworkElement 繼承) |
| 22 | Width 獲取或設定 FrameworkElement 的寬度。(從 FrameworkElement 繼承) |
ContextMenu 的常用方法
| 序號 | 方法及說明 |
|---|---|
| 1 | AddChild 將指定的物件作為 ItemsControl 物件的子級新增。(從 ItemsControl 繼承。) |
| 2 | Arrange 定位子物件並確定 UIElement 的大小。實現其子元素自定義佈局的父物件應從其佈局覆蓋實現中呼叫此方法,以形成遞迴佈局更新。(從 UIElement 繼承) |
| 3 | FindName 檢索具有指定識別符號名稱的物件。(從 FrameworkElement 繼承) |
| 4 | Focus 嘗試將焦點設定到控制元件上。(從 Control 繼承) |
| 5 | GetValue 從 DependencyObject 返回依賴屬性的當前有效值。(從 DependencyObject 繼承) |
| 6 | IsItemItsOwnContainer 確定指定項是否(或是否有資格成為)其自己的容器。(從 ItemsControl 繼承。) |
| 7 | OnDragEnter 在 DragEnter 事件發生之前呼叫。(從 Control 繼承) |
| 8 | OnDragLeave 在 DragLeave 事件發生之前呼叫。(從 Control 繼承) |
| 9 | OnDragOver 在 DragOver 事件發生之前呼叫。(從 Control 繼承) |
| 10 | OnDrop 在 Drop 事件發生之前呼叫。(從 Control 繼承) |
| 11 | OnContextMenuOpening 每當未處理的 ContextMenuClosing 路由事件在其路由中到達此類時都會呼叫。實現此方法以為此事件新增類處理。(從 FrameworkElement 繼承。) |
| 12 | OnItemsChanged 當 Items 屬性更改時呼叫。(從 ItemsControl 繼承。) |
| 13 | OnLostFocus 在 LostFocus 事件發生之前呼叫。(從 Control 繼承) |
| 14 | ReadLocalValue 如果設定了局部值,則返回依賴屬性的區域性值。(從 DependencyObject 繼承) |
| 15 | SetBinding 使用提供的繫結物件將繫結附加到 FrameworkElement。(從 FrameworkElement 繼承) |
| 16 | SetValue 設定 DependencyObject 上依賴屬性的區域性值。(從 DependencyObject 繼承) |
ContextMenu 的常用事件
| 序號 | 事件及說明 |
|---|---|
| 1 | Closed 當 ContextMenu 的特定例項關閉時發生。 |
| 2 | ContextMenuClosing 在元素上的任何上下文選單關閉之前發生。(從 FrameworkElement 繼承。) |
| 3 | ContextMenuOpening 當元素上的任何上下文選單開啟時發生。(從 FrameworkElement 繼承。) |
| 4 | DataContextChanged 當此元素的資料上下文更改時發生。(從 FrameworkElement 繼承。) |
| 5 | DragEnter 當輸入系統報告以該元素作為目標的基礎拖動事件時發生。(從 UIElement 繼承) |
| 6 | DragLeave 當輸入系統報告以該元素作為源的基礎拖動事件時發生。(從 UIElement 繼承) |
| 7 | DragOver 當輸入系統報告以該元素作為潛在放置目標的基礎拖動事件時發生。(從 UIElement 繼承) |
| 8 | Drop 當輸入系統報告以該元素作為放置目標的基礎放置事件時發生。(從 UIElement 繼承) |
| 9 | GotFocus 當 UIElement 獲取焦點時發生。(從 UIElement 繼承) |
| 10 | IsEnabledChanged 當 IsEnabled 屬性更改時發生。(從 Control 繼承) |
| 11 | KeyDown 當 UIElement 具有焦點時按下鍵盤鍵時發生。(從 UIElement 繼承) |
| 12 | KeyUp 當 UIElement 具有焦點時釋放鍵盤鍵時發生。(從 UIElement 繼承) |
| 13 | LostFocus 當 UIElement 失去焦點時發生。(從 UIElement 繼承) |
示例
讓我們建立一個名為 **WPFContextMenuControl** 的新 WPF 專案。
從工具箱中拖動一個文字框,並在屬性視窗中設定以下屬性。
| 屬性 | 值 |
|---|---|
| Name | textBox1 |
| Text | 您好,這是 WPF 教程 |
| TextWraping | Wrap |
| Width | 300 |
現在切換到 XAML 視窗,您將在其中看到文字框和 ContextMenu 的 XAML 標記。
新增更多屬性、選單項以及選中和未選中事件,如下面的 XAML 程式碼所示。
以下示例包含一個帶有 ContextMenu 的文字框,該選單可操作文字框內的文字。以下 XAML 程式碼建立了一個帶有某些屬性和事件上下文選單的文字框。
<Window x:Class = "WPFContextMenuControl.MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local = "clr-namespace:WPFContextMenuControl"
mc:Ignorable = "d" Title = "MainWindow" Height = "350" Width = "604">
<Grid>
<TextBox x:Name = "textBox1" HorizontalAlignment = "Left" Height = "178"
Margin = "92,61,0,0" TextWrapping = "Wrap" Text = "Hi, this is WPF tutorial"
VerticalAlignment = "Top" Width = "306">
<TextBox.ContextMenu>
<ContextMenu>
<MenuItem Header = "_Bold" IsCheckable = "True"
Checked = "Bold_Checked" Unchecked = "Bold_Unchecked" />
<MenuItem Header = "_Italic" IsCheckable = "True"
Checked = "Italic_Checked" Unchecked = "Italic_Unchecked" />
<Separator />
<MenuItem Header = "Increase Font Size" Click = "IncreaseFont_Click" />
<MenuItem Header = "_Decrease Font Size" Click = "DecreaseFont_Click" />
</ContextMenu>
</TextBox.ContextMenu>
</TextBox>
</Grid>
</Window>
以下是不同事件的 **C# 實現**。
using System.Windows;
namespace WPFContextMenuControl {
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
}
private void Bold_Checked(object sender, RoutedEventArgs e) {
textBox1.FontWeight = FontWeights.Bold;
}
private void Bold_Unchecked(object sender, RoutedEventArgs e) {
textBox1.FontWeight = FontWeights.Normal;
}
private void Italic_Checked(object sender, RoutedEventArgs e) {
textBox1.FontStyle = FontStyles.Italic;
}
private void Italic_Unchecked(object sender, RoutedEventArgs e) {
textBox1.FontStyle = FontStyles.Normal;
}
private void IncreaseFont_Click(object sender, RoutedEventArgs e) {
if (textBox1.FontSize < 18) {
textBox1.FontSize += 2;
}
}
private void DecreaseFont_Click(object sender, RoutedEventArgs e) {
if (textBox1.FontSize > 10) {
textBox1.FontSize -= 2;
}
}
}
}
編譯並執行上述程式碼後,將生成以下視窗:
我們建議您執行上述示例程式碼,並嘗試 ContextMenu 的其他一些屬性和事件。