나의 거친 생각 과정은 ... (참고 : 실제로 코딩하지는 않아 내 세부 사항이 다소 벗어날 수 있습니다 ...).
높은 수준의 행동은 :
- 컨트롤 데이터의 종류는 선택할 수 없습니다 항목의 목록입니다. 따라서 약
ItemsControl
(비주얼/XAML의 측면에서 보면 ItemsControl
은 WrapPanel
스타일 레이아웃이고 항목 템플릿은 매우 간단합니다. TextBlock
).
- 컨트롤이 포커스를 얻었을 때 컨트롤이 포커스를 잃을 때
TextBox
- 으로 템플릿을 전환해야 할 때 입력 된 텍스트를 분할하여 표시 할 목록으로 변환해야합니다.
따라서, 생각 코드 : 당신은 UserControl이 필요
- 이 가능 ItemsControl에서 파생. 이렇게하면 항목 목록을 나타내는 기본 동작이 제공됩니다.
- 구분 된 문자열을 나타내는 사용자 지정
DependencyProperty
이 필요합니다.
- 문자열 속성이 변경되면이를 구문 분석하고 컨트롤의 항목 목록을 바꿔야합니다.
- 목록 속성이 변경되면 문자열 속성을 적절하게 구분 된 목록으로 바꿔야합니다.
코드 숨김의 측면에서 보면 그 부분은 매우 간단해야합니다. 그런 다음 XAML 템플릿 ...
- 당신은 위에서 언급 한
WrapPanel
레이아웃을 사용하여리스트로 Items
속성을 표시하는 기본 템플릿이 필요합니다.
- 컨트롤에 포커스가있을 때이 템플릿을 대체하는 트리거가 필요합니다.
- 대체 템플릿은 컨트롤의 문자열 속성에 바인딩 된
TextBox
이어야합니다.
TextBox
의 기본 바인딩 동작은 TextBox
이 포커스를 잃을 때만 새 값을 누를 것이므로 "Enter"키 누르기 포커스를 만들 것인지 생각할 필요가 있습니다 (따라서 템플릿을 list version - 문자열 속성의 값이 변경되면 코드 숨김이 목록을 업데이트합니다.
기본 동작을 제공해야합니다. 컨트롤의 외부에서 문자열 속성 또는을 바인딩 할 수 있어야합니다. 두 속성을 서로 바인딩 할 때주의해야 할 수 있습니다.
이 기사가 도움이 될 수도 있습니다 : [TagBox 소개] (http://www.thesilvermethod.com/Default.aspx?Id=TagBox 소개) – xVir
http://blog.pixelingene.com/2010/10/tokenizing- 텍스트로 변환 제어/ -이 컨트롤을 살펴보십시오. – Sahadevan