WPF RichTextBox для создания редактора с [закрытыми] номерами строки

Ваша модель предметной области при переводе в таблицы базы данных будет противоречить принципам нормализации базы данных.

Проблема : Столбцы уровней в объекте категории создадут избыточность, и не будет необходимости упоминать изменение в модели, если позже вы выясните, что есть больше уровней для размещения.

Решение : Вот что я предлагаю вам:

Шаг 1. Измените свою сущность и создайте отношения между родителями и детьми следующим образом:

using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace DomainModel
{
    public class Category
    {
        public Category()
        {
            Children = new HashSet();
        }

        public int Id { get; set; }

        [Required]
        public string Name { get; set; }

        public int? ParentId { get; set; }

        public virtual ICollection Children { get; set; }

        public virtual Category Parent { get; set; }
    }
}

Родительско-дочерние отношения позволяют вам создавать столько уровней, сколько вам нужно. Если категория не принадлежит уровню (другими словами, это корневая категория), ее родитель будет нулевым.

Шаг 2. В методе OnModelCreating () вашего класса DbContext укажите отношение следующим образом:

modelBuilder.Entity()
    .HasMany(e => e.Children)
    .WithOptional(e => e.Parent)
    .HasForeignKey(e => e.ParentId);

Конечная таблица в базе данных будет выглядеть так:

enter image description here

15
задан Dave Clemmer 20 September 2011 в 07:07
поделиться

3 ответа

Я создал бы составной элемент управления с панелью стека блоки управления и текстовые блоки слева, которые Вы будете использовать для обработки нумерации строк. Если Вы обеспокоены количеством строк и имеющий слишком много визуальных элементов, то Вы могли использовать ListBox в виртуальном режиме.

необходимо было бы сцепиться до различных событий на RichTextBox так, чтобы Вы знали, когда обновить ListBox, а также вычислить высоту каждой строки, но это должно быть выполнимо с FlowDocument, присоединенным к RichTextBox.

3
ответ дан 1 December 2019 в 04:27
поделиться

"Защищенные" поддержки RichText - недоступный для редактирования - промежутки. Вы могли вывести свои номера строки, поскольку защищенный текст охватывает как часть потока RTF (когда Вы делаете свое форматирование).

В Формах Победы, можно использовать RichTextBox. Свойство SelectionProtected. WPF должен иметь что-то подобное.

Таким образом, все Ваши базовые линии будут корректны, и Вы не должны будете делать никаких дополнительных взглядов/программирования, чтобы заставить редактора вести себя правильно. Доступный для редактирования текст будет доступен для редактирования, и номера строки не будут.

Только вниз сторона - то, что необходимо повторно отправить поток RTF после каждого редактирования. Но я предполагаю, что Вы уже делали это для обеспечения форматирования синтаксического анализа / диагностика ошибок / безотносительно.

3
ответ дан 1 December 2019 в 04:27
поделиться

Как насчет того, чтобы использовать обогащенный текст AqiStar управление WPF? AqiStar. Текстовое поле

я не работаю на них... Я просто знаю, что Oren использует этот продукт в своем Профилировщике NHibernate (NHProf), и он, кажется, роет его.

2
ответ дан 1 December 2019 в 04:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: