我想创建一个类似于Outlook中电子邮件收件人文本框的WPF文本框控件。我并不是非常关心自动完成(我已经找到了数百万个示例),但我真正困扰的是如何使文本框中的分隔文本条目像Outlook中那样作为实体进行操作(一旦您输入的收件人解析出来,该文本就变成了“实体”,您可以单击它以选择,右键单击以获取上下文菜单等,它不再是您可以放置光标的“纯文本”)... 有没有高层次的想法如何实现这一点?是否知道任何现有的示例(我已经搜索了几个小时)?非常感谢您的帮助。
迈克尔。
迈克尔。
我的初步思路是这样的...(注意:我没有实际编写代码,所以我的细节可能有点不准确...)。
高级行为:
ItemsControl
(在视觉/XAML方面,它是一个带有WrapPanel
样式布局和非常简单的TextBlock
项目模板的ItemsControl
)。TextBox
。因此,思考代码:
DependencyProperty
,表示分隔符字符串。在代码后台方面,那部分应该非常简单。然后,对于XAML模板...
Items
属性显示为列表,使用上面提到的WrapPanel
布局。TextBox
。TextBox
的默认绑定行为只在TextBox
失去焦点时推送新值,因此你需要考虑是否要使“Enter”按键移动焦点(从而将模板恢复为列表版本 - 当字符串属性的值更改时,你的代码后台将更新列表)。这应该给你基本的行为。你应该能够从控件外部绑定列表属性或字符串属性,不过你可能要小心如果绑定了两个属性会发生什么,因为它们之间存在双向依赖...