Я надеюсь создавать управление текстовым полем WPF, которое действует подобное почтовым текстовым полям получателя в Outlook (К, Cc и исходные данные Bcc). Я не обязательно забочусь так очень об автозавершении (я нашел миллионы примеров для того), но с чем я действительно борюсь, то, как иметь записи разделенного текста в текстовом поле, ведут себя как объекты путем, они делают в Outlook (однажды получатель, Вы ввели твердость, тот текст становится 'объектом', который можно нажать для выбора, щелкните правой кнопкой для получения контекстного меню, и т.д. это не более длинный 'простой текст', в который можно установить курсор)...
У кого-либо есть какие-либо идеи высокого уровня, как выполнить это? Знайте о каких-либо существующих примерах (я гуглил в течение многих часов)?
Большое спасибо заранее,
Michael.
Мой примерный ход мыслей был бы таким... (Примечание: на самом деле я не кодирую это, поэтому мои детали могут быть немного неточными...).
Высокоуровневое поведение:
ItemsControl
(с точки зрения визуального/XAML, это ItemsControl
с WrapPanel
стилем компоновки и очень простым TextBlock
для шаблона элемента). TextBox
Поэтому, думая над кодом:
DependencyProperty
на вашем контроле, который представляет разграниченную строку. С точки зрения code-behind эта часть должна быть довольно простой. Затем, для шаблона XAML...
Items
в виде списка, используя упомянутый выше макет WrapPanel
. TextBox
, который привязан к свойству string элемента управления. TextBox
будет только подталкивать новое значение, когда TextBox
теряет фокус, поэтому вам нужно подумать, хотите ли вы сделать так, чтобы, скажем, нажатие клавиши "Enter" перемещало фокус (тем самым возвращая шаблон к версии списка - когда значение свойства string меняется, ваш codebehind будет обновлять список). Это должно дать вам базовое поведение. Вы должны иметь возможность привязать либо свойство list либо свойство string извне элемента управления, хотя вам, возможно, придется быть осторожным с тем, что произойдет, если вы привяжете оба свойства, поскольку между ними существует двусторонняя зависимость...