gpt4 book ai didi

wpf - 创建一个 WPF 文本框控件,如 Outlook 电子邮件收件人文本框

转载 作者:行者123 更新时间:2023-12-04 12:25:23 25 4
gpt4 key购买 nike

我希望创建一个 WPF 文本框控件,其行为类似于 Outlook 中的电子邮件收件人文本框(收件人、抄送和密件抄送输入)。我不一定那么关心自动完成(我已经找到了数百万个例子),但我真正苦苦挣扎的是如何让文本框中的分隔文本条目像实体一样表现Outlook(一旦您输入的收件人解析,该文本将成为一个“实体”,您可以单击以选择,右键单击以获取上下文菜单等。它不再是您可以放置​​光标的“纯文本”) ...

有没有人有任何高层次的想法如何做到这一点?知道任何现有的例子(我已经搜索了几个小时)?

提前非常感谢,

迈克尔。

最佳答案

我粗略的思考过程是这样的......(注意:我实际上并没有编码它,所以我的细节可能有点偏离......)。

高级行为:

  • 控件中的数据类型是不可选择的项目列表。因此,您的控制权大约是 ItemsControl (就视觉/XAML 而言,它是 ItemsControl,具有 WrapPanel 样式布局和非常简单的 TextBlock 用于项目模板)。
  • 当您的控件获得焦点时,您需要将模板切换为 TextBox
  • 当您的控件失去焦点时,您需要将输入的文本进行拆分,并将其转换为列表进行显示。

  • 因此,思考代码:
  • 您需要一个用户控件,可能从 ItemsControl 派生。这为您提供了表示项目列表的基本行为。
  • 你需要一个定制的DependencyProperty在代表分隔字符串的控件上。
  • 当字符串属性发生变化时,您需要对其进行解析并替换控件中的项目列表。
  • 当列表属性更改时,您需要将字符串属性替换为适当分隔的列表。

  • 就代码隐藏而言,这部分应该非常简单。然后,对于 XAML 模板...
  • 您需要一个基础模板来显示您的 Items属性作为列表,使用 WrapPanel上面提到的布局。
  • 当控件具有焦点时,您需要一个替换此模板的触发器。
  • 替换模板应该是 TextBox绑定(bind)到控件的字符串属性。
  • TextBox 上的默认绑定(bind)行为只会在 TextBox 时推送一个新值失去焦点,因此您需要考虑是否要制作“Enter”键移动焦点(从而将模板恢复为列表版本 - 当字符串属性的值更改时,您的代码隐藏将更新列表)。

  • 这应该给你基本的行为。您应该能够从控件外部绑定(bind)列表属性或字符串属性,但您可能必须小心如果绑定(bind)这两个属性会发生什么,因为它们之间存在双向依赖关系......

    关于wpf - 创建一个 WPF 文本框控件,如 Outlook 电子邮件收件人文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2806501/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com