Событие удаления InlineUIContainer в RichTextBox

Есть ли способ, чтобы получить уведомление, когда InlineUIContainer удаляется в RichTextBox? В настоящее время я использую Unload событие, которое является проблемой, потому что событие также вызывается, когда я переключаюсь между вкладками.

Мой код:

Создание InlineUIContainer:

InlineUIContainer container = new InlineUIContainer(presenter) { BaselineAlignment = BaselineAlignment.TextBottom };
container.Tag = new TagTextBoxObject(Id, InputText);
container.Unloaded += presenter_Unloaded;

Событие, которое не должно срабатывать при переключении вкладок:

void presenter_Unloaded(object sender, RoutedEventArgs e)
{
    Dispatcher.Invoke(
        (Action)delegate()
        {
            TagTextBoxObject item = (TagTextBoxObject)(sender as InlineUIContainer).Tag;

            if (newItems.ContainsKey(item.Id))
            {
                newItems.Remove(item.Id);
            }

            if (!deletedItems.ContainsKey(item.Id))
            {
                deletedItems.Add(item.Id, item.Text);
            }
        });
}

2 ответа

Решение

Решение, посмотрите, загружен ли родитель:

    void presenter_Unloaded(object sender, RoutedEventArgs e)
    {
        if (this.Parent != null && this.Parent is FrameworkElement)
        {
            if ((this.VisualParent as FrameworkElement).IsLoaded)
            {
                Dispatcher.Invoke(
                    (Action)delegate()
                    {
                        TagTextBoxObject item = (TagTextBoxObject)(sender as InlineUIContainer).Tag;

                        if (newItems.ContainsKey(item.Id))
                        {
                            newItems.Remove(item.Id);
                        }

                        if (!deletedItems.ContainsKey(item.Id))
                        {
                            deletedItems.Add(item.Id, item.Text);
                        }
                    });
            }
        }
    }

Вы можете отписаться от события Unload, когда TabControl.SelectionChanged уволен. И подписаться снова, когда конкретная вкладка выбрана.

Но я думаю, что лучше всего создать пользовательский элемент управления, который будет содержать TextBox и ItemsControl и не использовать RichTextBox.

Другие вопросы по тегам