Измените цвет панели инструментов RichTextBox с помощью команд отмены и повтора

#c# #wpf #vb.net #xaml #command

#c# #wpf #vb.net #xaml #команда

Вопрос:

1- Запустите следующий код.

 <Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">

<StackPanel>
    <ToolBar>
        <Button x:Name="UndoButton" Width="30" CommandTarget="{Binding ElementName=RichTextBox1}" Command="ApplicationCommands.Undo">
            <TextBlock x:Name="UndoTextBlock" Foreground="Gray" FontFamily="Wingdings 3" FontSize="24" Text="Q"/>
        </Button>

        <Button x:Name="RedoButton" Width="30" CommandTarget="{Binding ElementName=RichTextBox1}" Command="ApplicationCommands.Redo">
            <TextBlock x:Name="RedoTextBlock" Foreground="Gray" FontFamily="Wingdings 3" FontSize="24" Text="P"/>
        </Button>
    </ToolBar>

    <RichTextBox x:Name="RichTextBox1">
        <FlowDocument>
            <Paragraph>
                <Run Text="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum."/>
            </Paragraph>
        </FlowDocument>
    </RichTextBox>
</StackPanel>

</Window> 
  

2- Проверьте, не подсвечивается ли UndoButton при наведении мыши на UndoButton.

3 — Удалите часть текста из открывшегося окна.

4- Проверьте, не подсвечивается ли UndoButton, когда вы наводите курсор мыши на UndoButton.

5- Как вы можете видеть, если вы удаляете какой-либо текст, то UndoButton подсвечивается, когда вы наводите курсор мыши на UndoButton

Мой вопрос здесь;

Я хочу изменить цвет переднего плана UndoTextBlock с серого на зеленый, когда пользователь удаляет некоторый текст (когда активен UndoButton).

Комментарии:

1. I want to change поймите, не могли бы вы, пожалуйста, опубликовать код, который вы пробовали, чтобы мы могли лучше помочь.

Ответ №1:

Я думаю, что смогу обработать событие TextChanged richTextBox1.

Сначала получите исходное содержимое из RichTextBox.

Затем сравните исходное содержимое с новым содержимым.

Если содержимое изменилось, измените цвет переднего плана для undoTextBlock на зеленый.

     private void RichTextBox1_OnTextChanged(object sender, TextChangedEventArgs e)
    {
        var textRange = new TextRange(RichTextBox1.Document.ContentStart,RichTextBox1.Document.ContentEnd);
        var text = textRange.Text;

        if (string.IsNullOrEmpty(text.Trim()))
            return;

        if (!_loaded)
        {
            _orginalContent = text;
            _loaded = true;
        }

        var newContent = text;
        if (newContent == _orginalContent)
            UndoTextBlock.Foreground = Brushes.Gray;
        else
            UndoTextBlock.Foreground = Brushes.Green;
    }
  

введите описание изображения здесь