共用方式為


HOW TO:使用內容功能表的拼字檢查

更新:2007 年 11 月

根據預設,當您在編輯控制項 (例如 TextBoxRichTextBox) 中啟用拼字檢查時,拼字檢查選項便會出現在內容功能表中。例如,當使用者以滑鼠右鍵按一下拼錯的文字時,他們會取得一組拼字建議或 [全部忽略] 的選項。不過,當您使用自己的自訂內容功能表覆寫預設內容功能表時,這項功能就會失效,而且您必須撰寫程式碼,以重新啟用內容功能表中的拼字檢查功能。下列範例示範如何在 TextBox 上啟用這項功能。

範例

下列範例顯示可延伸標記語言 (XAML) 使用用來實作內容功能表的幾項事件建立 TextBox

<Page x:Class="SDKSample.SpellerCustomContextMenu"
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    Loaded="OnWindowLoaded">

  <TextBox
    Name="myTextBox" 
    TextWrapping="Wrap"
    SpellCheck.IsEnabled="True"
    ContextMenuOpening="tb_ContextMenuOpening">
    In a custum menu you need to write code to add speler choices
    because everything in a custom context menu has to be added explicitly.
  </TextBox>

</Page>

下列範例顯實作內容功能表的程式碼。

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace SDKSample
{
    public partial class SpellerCustomContextMenu : Page
    {

        void OnWindowLoaded(object sender, RoutedEventArgs e)
        {
            //This is required for the first time ContextMenu invocation so that TextEditor doesnt handle it.
            myTextBox.ContextMenu = GetContextMenu();
        }
        void tb_ContextMenuOpening(object sender, RoutedEventArgs e)
        {
            int caretIndex, cmdIndex;
            SpellingError spellingError;

            myTextBox.ContextMenu = GetContextMenu();
            caretIndex = myTextBox.CaretIndex;

            cmdIndex = 0;
            spellingError = myTextBox.GetSpellingError(caretIndex);
            if (spellingError != null)
            {
                foreach (string str in spellingError.Suggestions)
                {
                    MenuItem mi = new MenuItem();
                    mi.Header = str;
                    mi.FontWeight = FontWeights.Bold;
                    mi.Command = EditingCommands.CorrectSpellingError;
                    mi.CommandParameter = str;
                    mi.CommandTarget = myTextBox;
                    myTextBox.ContextMenu.Items.Insert(cmdIndex, mi);
                    cmdIndex++;
                }
                Separator separatorMenuItem1 = new Separator();
                myTextBox.ContextMenu.Items.Insert(cmdIndex, separatorMenuItem1);
                cmdIndex++;
                MenuItem ignoreAllMI = new MenuItem();
                ignoreAllMI.Header = "Ignore All";
                ignoreAllMI.Command = EditingCommands.IgnoreSpellingError;
                ignoreAllMI.CommandTarget = myTextBox;
                myTextBox.ContextMenu.Items.Insert(cmdIndex, ignoreAllMI);
                cmdIndex++;
                Separator separatorMenuItem2 = new Separator();
                myTextBox.ContextMenu.Items.Insert(cmdIndex, separatorMenuItem2);
            }
        }

        // Gets a fresh context menu. 
        private ContextMenu GetContextMenu()
        {
            ContextMenu cm = new ContextMenu();

            //Can create STATIC custom menu items if exists here...
            MenuItem m1, m2, m3, m4;
            m1 = new MenuItem();
            m1.Header = "File";
            m2 = new MenuItem();
            m2.Header = "Save";
            m3 = new MenuItem();
            m3.Header = "SaveAs";
            m4 = new MenuItem();
            m4.Header = "Recent Files";

            //Can add functionality for the custom menu items here...

            cm.Items.Add(m1);
            cm.Items.Add(m2);
            cm.Items.Add(m3);
            cm.Items.Add(m4);

            return cm;
        }

    }
}

RichTextBox 執行這項動作的程式碼十分類似。主要差異是傳遞到 GetSpellingError 方法的參數。針對 TextBox,請傳遞插入號 (Caret) 位置的整數索引:

spellingError = myTextBox.GetSpellingError(caretIndex);

針對 RichTextBox,請傳遞指定插入號位置的 TextPointer

spellingError = myRichTextBox.GetSpellingError(myRichTextBox.CaretPosition);

請參閱

工作

HOW TO:在文字編輯控制項中啟用拼字檢查

HOW TO:在文字方塊使用自訂內容功能表

概念

TextBox 概觀

RichTextBox 概觀