동작 서비스 개요
BehaviorService는 디자이너의 사용자 인터페이스를 관리합니다.디자인 타임에 마우스 관련 이벤트, 메뉴 명령 및 OLE 끌어서 놓기 작업과 같은 사용자 인터페이스 요소를 조작하는 일관된 방식을 제공합니다.
디자인 타임에 사용자 인터페이스 관리
사용자 지정 디자인 타임 환경을 만들 때의 핵심 요소는 사용자 인터페이스를 관리하는 것입니다.사용자 지정 디자이너를 만들어 사용자 지정 컨트롤의 디자인 타임 환경을 제공합니다.
디자이너 개발자는 표시기(Adorner)라는 고유의 인터페이스 계층을 만들 수 있습니다.각 계층 화면 내에서 그리기, 끌기 및 기타 UI 작업을 위한 고유의 Glyph 형식을 만듭니다.각 Glyph에는 연결된 Behavior 형식이 있을 수 있습니다.Behavior는 메뉴 명령, 마우스 이동 및 OLE 끌어서 놓기 작업을 포함한 모든 사용자 입력에 대한 오버로드가 있는 클래스입니다.또한 Behavior 개체를 Glyph 개체와 별도로 추가할 수 있으므로 전체 디자이너의 일반적인 사용자 입력에 후크할 수 있습니다.앞서 언급한 세 가지 기능 모두 Behavior 형식으로 구현됩니다.
[!참고]
디자인 타임 어셈블리 System.Design.dll에 대한 참조를 추가해야 합니다.이 어셈블리는 .NET Framework 4 Client Profile에 포함되지 않습니다.System.Design.dll에 대한 참조를 추가하려면 프로젝트의 대상 프레임워크를 .NET Framework 4로 변경해야 합니다.
.NET Framework 버전 1.1에서 OnMouseDragBegin과 같은 일부 이벤트가 ControlDesigner 클래스에서 노출되었습니다.이 모델에서는 UI 디자이너 논리의 대부분이 EventHandler에서 구현됩니다.컨트롤에는 사용자가 조작할 수 있는 여러 전용 영역이 있으므로 이 모델에서는 많은 지원 논리를 작성해야 했습니다.
Behavior 형식은 이 문제를 해결합니다.BehaviorService는 두 부분으로 구성됩니다.다음 표에서는 각 부분에 대해 설명합니다.
파트 |
설명 |
---|---|
Behavior 클래스 스택 |
각 클래스에는 메뉴 명령, OLE 끌어서 놓기 작업, 마우스 이벤트 등과 관련된 메서드가 있습니다.스택의 맨 위에 있는 클래스는 활성 Behavior이며 모든 사용자 입력이 해당 Behavior로 라우팅됩니다. |
Adorner는 디자이너 화면과 사용자 사이에 있는 보이지 않는 계층입니다.Adorner에는 간단하게 렌더링된 개체인 Glyph 개체가 포함될 수 있습니다.Glyph는 동작 서비스에 의해 적중 테스트될 수 있으며 적중 테스트에서Glyph가 true를 보고하는 경우 활성 Behavior가 되는 Behavior 개체를 선택적으로 노출할 수도 있습니다. |
Windows Forms 디자이너에서 끌기 및 마우스 이동에 대한 원래의 ControlDesigner 재정의를 계속 지원하지만 이 작업은 Behavior 개체로 구현됩니다.다음 표에서는 일반적인 끌기 핸들 집합이 있는 간단한 컨트롤에 대한 디자이너 요소를 보여 줍니다.
동작 요소 |
설명 |
---|---|
선택 표시기 |
모든 선택 UI Glyph 개체를 처리하는 하나의 표시 계층입니다. |
본문 문자 모양 |
컨트롤의 맨 위에 있는 완전히 투명한 본문 Glyph입니다.이 동작이 모든 마우스 상호 작용을 처리합니다. |
잡기 문자 모양 |
디자인 타임 사용자 인터페이스 확장
BehaviorService 모델을 사용하면 새 기능을 기존 사용자 인터페이스에 쉽게 배치할 수 있습니다.새 UI는 이전에 정의된 다른 Glyph 및 Behavior 개체와 독립적으로 유지됩니다.예를 들어, 일부 컨트롤의 스마트 태그를 컨트롤의 오른쪽 위 모퉁이에 있는 Glyph로 액세스합니다().
스마트 태그 코드는 자체의 Adorner 계층을 만들고 Glyph 개체를 이 계층에 추가합니다.이렇게 하면 스마트 태그 Glyph 개체가 선택 Glyph 개체와 별도로 유지됩니다.새 Adorner를 Adorners 컬렉션에 추가하는 데 필요한 코드는 간단합니다.
behaviorService = (BehaviorService)serviceProvider.GetService(typeof(BehaviorService));
designerActionAdorner = new Adorner();
behaviorService.Adorners.Add(designerActionAdorner);
Glyph dag = new DesignerActionGlyph(/*...*/);
designerActionAdorner.Glyphs.Add(dag);
문자 모양 및 동작
Glyph 형식은 단순합니다.복잡한 기능이 필요한 경우 Glyph에서 파생된 사용자 클래스에 이를 추가합니다.
Glyph 개체에는 Behavior 개체가 있을 수 있지만 꼭 필요한 것은 아닙니다.Behavior 개체가 없는 Glyph에는 null을 반환하는 Behavior 속성이 있습니다.
Behavior에는 각각의 지원되는 사용자 상호 작용에 대한 메서드가 있습니다.예를 들어, 기본 Behavior 클래스에는 OnDragEnter 및 OnGiveFeedback과 같은 끌어서 놓기 작업을 지원하기 위한 메서드가 있습니다.
메서드는 대부분 이벤트가 처리되었는지 여부를 나타내는 부울 값을 반환합니다.끌기 이벤트의 경우 DragEventArgs 매개 변수에 값이 있습니다.FindCommand 메서드에서 메뉴 항목을 반환하여 개별 메뉴 항목을 추가하거나 제거할 수 있습니다.FindCommand 메서드는 DisableAllCommands 속성과 함께 작동하여 MenuCommand 개체와 동작이 상호 작용하는 방법을 지정합니다.
표시기
Adorner는 Glyph 개체로 구성되는 사용자 인터페이스 관련 요소와 BehaviorService 사이의 프록시로 표시될 수 있습니다.
각 Adorner를 사용하거나 사용하지 않을 수 있습니다.사용하는 Adorner 개체만 BehaviorService에서 적중 테스트와 그리기 메시지를 받습니다.
Adorner를 BehaviorService의 BehaviorServiceAdornerCollection에 추가하면 컬렉션에서 BehaviorService 속성을 설정하여 Adorner가 BehaviorService로 콜백할 수 있습니다.
Adorner 개체의 Invalidate 메서드를 호출하면 연결된 BehaviorService가 Adorner 창을 새로 고칩니다.
누름 동작
Behavior 개체를 동작 스택에 추가하는 가장 쉬운 방법은 Glyph 개체를 사용하는 것이지만 다른 방법도 있습니다.Glyph 개체가 자체적으로 동작 스택에서 Behavior 개체를 푸시할 수 있지만 사용자가 동작 스택에서 직접 Behavior 개체를 푸시할 수도 있습니다.디자인 화면 주변으로 잡기 핸들을 끄는 경우를 고려할 수 있습니다.사용자가 끄는 때를 추적하는 논리를 작성하는 대신 Glyph 자체에서 동작 스택의 시퀀스에 따라 다음 작업을 수행합니다.
마우스 단추를 누르면 Glyph가 동작 스택에서 새 Behavior를 푸시합니다.이 Behavior가 마우스 이동 및 마우스 놓기 이벤트를 처리합니다.또한 끄는 동안 바로 가기 키나 다른 명령이 발생하지 않도록 모든 메뉴 명령을 사용할 수 없도록 설정할 수 있습니다.
마우스 단추를 놓으면 Behavior는 이동 동작을 완료하고 동작 스택에서 저절로 사라집니다.그러면 이전 Behavior가 자동으로 복원됩니다.
[!참고]
BehaviorService 아키텍처는 Windows Forms 모델과 연관되어 있으므로 Web Forms와 같은 다른 화면 표시 기술을 지원하지 않습니다.