Skip to main content

Implement Standalone WPF Spell Checker in Code-Behind

  • 4 minutes to read

This tutorial describes how to start a spell check in a DevExpress TextEdit control on a Button click.

Add Items on the Form

In Microsoft Visual Studio, create a new WPF Application and open the MainWindow.xaml file in the designer.

Drag the TextEdit item from the DX.24.1.WPF: Common Controls toolbox tab and a Button control (“Check Spelling”) from the All WPF Controls toolbox tab onto the window.

DXSpellChecker_GettingStartedApp

After this, your XAML should look as follows (if it does not, you can overwrite your code):

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
        Title="Spell Checker" Height="350" Width="525">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <dxe:TextEdit Name="textEdit1"
                        HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
                        Grid.Column="1"
                        AcceptsReturn="True"
                        TextWrapping="Wrap"
                        VerticalContentAlignment="Top"/>
        <Button Name="button1"
                Margin="12,12,12,0" Height="23" Width="85"
                HorizontalAlignment="Left"  VerticalAlignment="Top"
                Grid.Column="0"
                Content="Check Spelling" Click="button1_Click" />
    </Grid>
</Window>

Add Library References

Add references to the following libraries:

  • DevExpress.Xpf.SpellChecker.v24.1.dll,
  • DevExpress.SpellChecker.v24.1.Core.dll.

DXSpell Checker_AddReference

If you prefer to copy assemblies locally, or need to include them into your product’s installation later, you can find their copies in the following directory: C:\Program Files\DevExpress 24.1\Components\Bin\Framework\

Add Dictionaries

The next step is to specify a dictionary to perform the spell check.

This tutorial uses the Polish OpenOffice dictionary. The OpenOffice dictionaries are available for free, and are constantly updated as a part of the open source project.

On the Dictionaries page find the Polish (Poland) section, and download the Polish Dictionary Pack for OpenOffice 3.0.

Rename the pack name extension to .zip and unpack it. The archive contains the pl_PL.dic file with a list of words, and the pl_PL.aff file with grammar rules.

Create the Dictionaries folder in the directory of your project and copy the pl_PL.aff and pl_PL.dic files there. Include the Dictionaries folder in the project, and make sure that you set the Build Action property to Embedded Resource for dictionary files.

DXSpellChecker_EmbeddedResource

Tip

If the Dictionaries folder is not displayed in the Solution Explorer, select Show All Files from the Project menu or click Show All Files SpellChecker_ShowAllFilesIcon on the Solution Explorer toolbar.

Load Dictionaries and Handle the Click Event

Use the following code to load the dictionary and start spell checking in the TextEdit control when a user clicks the button:

using System.IO;
using System.Windows;
using System.Reflection;
using System.Globalization;
using DevExpress.Xpf.SpellChecker;
using DevExpress.XtraSpellChecker;

SpellChecker checker;

public MainWindow() {
    checker = new SpellChecker();

    InitializeComponent();

    // Obtain dictionary information from the assembly
    Stream dict = Assembly.GetExecutingAssembly().
        GetManifestResourceStream("WpfApplication1.Dictionaries.pl_PL.dic");
    Stream grammar = Assembly.GetExecutingAssembly().
        GetManifestResourceStream("WpfApplication1.Dictionaries.pl_PL.aff");

    // Create a dictionary object
    // and load information into it
    SpellCheckerOpenOfficeDictionary dictionary = new SpellCheckerOpenOfficeDictionary();
    dictionary.LoadFromStream(dict, grammar, null);

    // Define the dictionary culture
    CultureInfo culture = new CultureInfo("pl-PL");
    dictionary.Culture = culture;

    // Add the dictionary to the spell checker's collection
    checker.Dictionaries.Add(dictionary);

    // Set the spell checker culture
    checker.Culture = culture;
}

private void button1_Click(object sender, RoutedEventArgs e) {
    // Start checking the text in a text box
    checker.Check(textEdit1);
}

User Interaction

When an user starts spelling check (calls the SpellChecker.Check method), the Spelling Dialog occurs.

DXSpellChecker_GettingStarted_Result

You can use this dialog to make corrections, such as:

  • Replace the current occurrence or all occurrences of the misspelled word with one of the suggested corrections
  • Ignore this word once, or whenever it occurs
  • Add the word to the custom dictionary (if the custom dictionary is available)

The Spelling dialog ships with a number of events that allow you to track user interaction.

The following events are available:

Event Description
SpellingFormShowing Occurs when the Spelling Dialog invokes.
CheckCompleteFormShowing Occurs when the spell checker finished checking and the message occurs.
WordAdded Fires after the word is added to a custom dictionary.
AfterCheckWord Fires after a word is checked.
BeforeLoadDictionaries Occurs before dictionaries are loaded.
AfterLoadDictionaries Occurs after the dictionaries are loaded.
CustomDictionaryChanged Occurs when the user modifies a custom dictionary.