WPF - 上下文選單



ContextMenu 是一個彈出選單,它使控制元件能夠公開特定於控制元件上下文的函式。只要使用者介面從該元素內部請求上下文選單,它就會出現。ContextMenu 類的層次繼承如下:

Hierarchical of 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; 
         } 
      } 
		
   } 
}

編譯並執行上述程式碼後,將生成以下視窗:

Output of Contextmenu

我們建議您執行上述示例程式碼,並嘗試 ContextMenu 的其他一些屬性和事件。

wpf_controls.htm
廣告

© . All rights reserved.