2010-05-10 4 views
7

Outlook의 전자 메일받는 사람 텍스트 상자 (받는 사람, 참조 및 숨은 참조 입력)와 유사한 역할을하는 WPF 텍스트 상자 컨트롤을 만들려고합니다. 나는 자동 완성에 관해서는별로 신경 쓰지 않는다. (나는 수백만 가지 예제를 발견했다.)하지만 실제로 고민하고있는 것은 텍스트 박스에서 텍스트로 구분 된 텍스트 엔트리를 엔티티로 사용하는 방법이다. Outlook (입력 한 수신자가 확인되면 해당 텍스트를 클릭하여 선택할 수있는 '엔터티'가됩니다. 마우스 오른쪽 버튼을 클릭하여 컨텍스트 메뉴를 가져올 수 있습니다. 더 이상 커서를 놓을 수없는 '일반 텍스트'가 아닙니다.) ...Outlook 전자 메일받는 사람 텍스트 상자와 같은 WPF 텍스트 상자 컨트롤 만들기

아무도이 작업을 수행하는 방법에 대한 높은 수준의 아이디어가 있습니까? 기존 예제를 아십시오 (몇 시간 동안 봤습니다)?

미리 감사드립니다.

마이클.

+0

이 기사가 도움이 될 수도 있습니다 : [TagBox 소개] (http://www.thesilvermethod.com/Default.aspx?Id=TagBox 소개) – xVir

+0

http://blog.pixelingene.com/2010/10/tokenizing- 텍스트로 변환 제어/ -이 컨트롤을 살펴보십시오. – Sahadevan

답변

5

나의 거친 생각 과정은 ... (참고 : 실제로 코딩하지는 않아 내 세부 사항이 다소 벗어날 수 있습니다 ...).

높은 수준의 행동은 :

  • 컨트롤 데이터의 종류는 선택할 수 없습니다 항목의 목록입니다. 따라서 약 ItemsControl (비주얼/XAML의 측면에서 보면 ItemsControlWrapPanel 스타일 레이아웃이고 항목 템플릿은 매우 간단합니다. TextBlock).
  • 컨트롤이 포커스를 얻었을 때 컨트롤이 포커스를 잃을 때 TextBox
  • 으로 템플릿을 전환해야 할 때 입력 된 텍스트를 분할하여 표시 할 목록으로 변환해야합니다.

따라서, 생각 코드 : 당신은 UserControl이 필요

  • 이 가능 ItemsControl에서 파생. 이렇게하면 항목 목록을 나타내는 기본 동작이 제공됩니다.
  • 구분 된 문자열을 나타내는 사용자 지정 DependencyProperty이 필요합니다.
  • 문자열 속성이 변경되면이를 구문 분석하고 컨트롤의 항목 목록을 바꿔야합니다.
  • 목록 속성이 변경되면 문자열 속성을 적절하게 구분 된 목록으로 바꿔야합니다.

코드 숨김의 측면에서 보면 그 부분은 매우 간단해야합니다. 그런 다음 XAML 템플릿 ...

  • 당신은 위에서 언급 한 WrapPanel 레이아웃을 사용하여리스트로 Items 속성을 표시하는 기본 템플릿이 필요합니다.
  • 컨트롤에 포커스가있을 때이 템플릿을 대체하는 트리거가 필요합니다.
  • 대체 템플릿은 컨트롤의 문자열 속성에 바인딩 된 TextBox이어야합니다.
  • TextBox의 기본 바인딩 동작은 TextBox이 포커스를 잃을 때만 새 값을 누를 것이므로 "Enter"키 누르기 포커스를 만들 것인지 생각할 필요가 있습니다 (따라서 템플릿을 list version - 문자열 속성의 값이 변경되면 코드 숨김이 목록을 업데이트합니다.

기본 동작을 제공해야합니다. 컨트롤의 외부에서 문자열 속성 또는을 바인딩 할 수 있어야합니다. 두 속성을 서로 바인딩 할 때주의해야 할 수 있습니다.

관련 문제