Изменить цвет панели инструментов RichTextBox с помощью команды «Отменить» и «Повторить» - PullRequest
1 голос
/ 28 марта 2019

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 Ответ

0 голосов
/ 29 марта 2019

Я думаю, что может обработать событие 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;
    }

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...