Я пытаюсь добиться необычного использования Adorner. Когда вы нажмете над RichTextBox, над ним появится Adorner (см. Диаграмму ниже), что позволит вам добавить список строк в ListBox, содержащийся в Adorner. Это используется для добавления "тегов" (à la Flickr) к проходу, содержащемуся в украшенном элементе.
Во-первых,: возможно ли это?
В большинстве примеров Adorners показано, как переопределить метод Adorner OnRender, чтобы делать тривиальные вещи, такие как рисование фигур. Я смог использовать это, чтобы отобразить набор прямоугольников, которые создают серая граница Adorner, которая также автоматически изменяет размер, если высота RichTextBox увеличивается из-за добавления дополнительных строк текста, пока отображается Adorner.
protected override void OnRender(DrawingContext drawingContext)
{
SolidColorBrush grayBrush = new SolidColorBrush();
grayBrush.Color = Color.FromRgb(153, 153, 153);
// left
drawingContext.DrawRectangle(grayBrush, null, new System.Windows.Rect(1, 1, 5, ActualHeight));
// right
drawingContext.DrawRectangle(grayBrush, null, new System.Windows.Rect(ActualWidth - 6, 1, 5, ActualHeight));
//bottom
drawingContext.DrawRectangle(grayBrush, null, new System.Windows.Rect(1, ActualHeight, ActualWidth - 2, 5));
// for reasons unimportant to this example the top gray bar is rendered as part of the RichTextBox
}
Однако добавление элементов управления несколько более проблематично. Вообще говоря, поклонник WPF требует добавления дочерних элементов управления в код, а не XAML. Используя метод, описанный в DrawingContext adorner - можно нарисовать stackpanel?, я узнал, как добавлять дочерние элементы управления (например, TextBox) к Adorner без каких-либо проблем в Adorner инициализатор.
Однако проблема заключается в размещении этих элементов управления в Adorner.
Если бы я мог создать сетку с серым фоном и поместить ее в нижней части Adorner, я должен хорошо идти. Я бы предположил (надеюсь), что такие вещи, как автоматическое изменение размера Adorner на основе изменения размера этой метки в виде таблицы, будут автоматически выполняться.
Короче говоря, если предположить, что это возможно, может ли кто-нибудь рекомендовать способ создания этой более низкой области управления тегами в Adorner и позиционирования ее относительно дна Adorner (который, возможно, придется изменять размер как содержимое RichTextBox изменяется)?