Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<GridSplitter Grid.Column ="0" Width ="5" Background ="Gray" />
<StackPanel Grid.Column="0" VerticalAlignment ="Stretch" >
<Label Name="lblSpellingInstructions" FontSize="14" Margin="10,10,0,0">
Spelling Hints
</Label>
<Expander Name="expanderSpelling" Header ="Try these!"
Margin="10,10,10,10">
<b> <!-- Будет заполняться программно --></b>
<Label Name ="lblSpellingHints" FontSize ="12"/>
</Expander>
</StackPanel>
<b> <!-- Это будет областью для ввода --></b>
<TextBox Grid.Column ="1"
SpellCheck.IsEnabled ="True"
AcceptsReturn ="True"
Name ="txtData" FontSize ="14"
BorderBrush ="Blue"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Auto">
</TextBox>
</Grid>
Реализация обработчиков событий MouseEnter/MouseLeave
К настоящему моменту пользовательский интерфейс окна готов. Понадобится лишь предоставить реализации оставшихся обработчиков событий. Начните с обновления файла кода C# так, чтобы каждый из обработчиков событий
MouseEnter
MouseLeave
public partial class MainWindow : System.Windows.Window
{
...
protected void MouseEnterExitArea(object sender, RoutedEventArgs args)
{
statBarText.Text = "Exit the Application";
}
protected void MouseEnterToolsHintsArea(object sender, RoutedEventArgs args)
{
statBarText.Text = "Show Spelling Suggestions";
}
protected void MouseLeaveArea(object sender, RoutedEventArgs args)
{
statBarText.Text = "Ready";
}
}
Теперь приложение можно запустить. Текст в строке состояния должен изменяться в зависимости от того, над каким пунктом меню или кнопкой панели инструментов находится курсор.
Реализация логики проверки правописания
Инфраструктура WPF имеет встроенную поддержку проверки правописания, независимую от продуктов Microsoft Office. Это значит, что использовать уровень взаимодействия с СОМ для обращения к функции проверки правописания Microsoft Word не понадобится: та же самая функциональность добавляется с помощью всего нескольких строк кода.
Вспомните, что при определении элемента управления
TextBox
Spellcheck.IsEnabled
true
Добавьте в метод
ToolsSpellingHints_Click()
protected void ToolsSpellingHints_Click(object sender, RoutedEventArgs args)
{
string spellingHints = string.Empty;
<b> // Попробовать получить ошибку правописания</b>
<b> // в текущем положении курсора ввода.</b>
SpellingError error = txtData.GetSpellingError(txtData.CaretIndex);
if (error != null)
{
<b> // Построить строку с предполагаемыми вариантами правописания.</b>
foreach (string s in error.Suggestions)
{
spellingHints += $"{s}n";
}
<b> // Отобразить предполагаемые варианты и раскрыть элемент Expander.</b>
lblSpellingHints.Content = spellingHints;
expanderSpelling.IsExpanded = true;
}
}
Приведенный выше код довольно прост. С применением свойства
CaretIndex
SpellingError
null
Suggestions
Label
Expander