Событие удаления 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.