장식품은 언제 사용해야 합니까?
WPF는 여러분의 목표를 달성할 수 있는 많은 방법들이 있기 때문에 좋습니다.예를 들어, 제가 알기로는 어드레서는 UI 요소에 일부 컨트롤을 추가할 수 있지만, 추가 요소가 포함된 커스텀 컨트롤을 통해 동일한 동작을 수행할 수 있다고 생각합니다.
그래서 제 질문은: 제가 더 복잡한(그러나 더 유연한) 사용자 지정 컨트롤보다 언제 장식품을 더 선호해야 할까요?MVVM 패턴을 광범위하게 사용하고 있으며 추가 요소에 명령을 바인딩하고 싶습니다.
특히, 저는 다이어그램 디자이너 애플리케이션을 디자인하고 있는데, 제 모양에 연결점을 추가하고 싶습니다.사용자 정의 컨트롤과 도너 사이에서 결정해야 하는 또 다른 예는 라인을 "따라" 자동으로 배치되는 레이블을 보여주는 라인입니다.
감사해요.
장식기는 대부분의 용도로 제어 템플릿을 사용하는 것보다 약간 더 많은 작업이 필요합니다.장식품이 제공하는 추가 기능을 원한다면 사용하십시오.그렇지 않으면 컨트롤 템플릿을 사용합니다.
다음은 아도르가 테이블에 가져오는 주요 기능입니다.
- 장식기는 별도의 층에 있기 때문에 장식된 요소를 잘라내더라도 시각적으로 장식된 요소를 넘어 확장될 수 있습니다.
- 장식기는 별도의 레이어에 있기 때문에 일반적으로 장식 요소의 컨테이너나 형제 제어에 의해 가려지지 않습니다.
- 장식기는 장식된 요소의 크기와 위치의 모든 변경사항을 자동으로 알려주기 때문에 일반적인 컨트롤로는 쉽게 달성할 수 없는 레이아웃 변경사항에 대응할 수 있습니다.
- 장식기는 템플릿을 변경하거나 다른 방법으로 변경하지 않고 패널 및 기존 컨트롤에 적용할 수 있습니다.이렇게 하면 임의 컨트롤에 대한 조작 핸들 또는 시각적 피드백을 제공하는 데 유용합니다.
- 대부분의 시나리오에서 수백 또는 수천 개의 "활성" 항목에 대해서만 장식기를 만듭니다.템플릿에 패널을 추가해야 하는 경우 ControlTemplate를 사용하여 동일한 기능을 구현하면 효율성이 크게 떨어질 수 있습니다.템플릿의 모든 설치에는 추가 패널이 있지만 도너는 하나뿐입니다.
다음은 제어 템플릿과 달리 장식품 사용과 관련된 몇 가지 잠재적 비용입니다.
- 호출할 코드를 작성해야 합니다.
.GetAdornerLayer()
그리고..Add()
그리고 아도너의 일생을 관리하는 것. - Adorner에 대한 렌더링 코드를 작성하거나 다음을 포함할 코드를 추가해야 합니다.
Control
도너의 자식으로서 컨트롤 템플릿을 사용할 수 있습니다. - 일반적으로 코드로 사용자 정의 측정/배열 계산을 수행합니다(도너 내에서 제어 템플릿을 사용하지 않는 경우).
- 전달해야 합니다.
RoutedEvents
대상 컨트롤에서 처리하려는 경우 장식 요소로 이동합니다. - 다음을 추가해야 합니다.
DataContext="{Binding AdornedElement.DataContext}"
데이터 컨텍스트를 사용할 수를 원하는 경우 - 모든 레이아웃 패스에서 가시적인 Adorner가 스캔되므로 한 번에 수천 개의 장식품을 화면에 표시하면 눈에 띄는 속도 저하가 발생할 수 있습니다. (일반적인 비주얼은 직접적인 영향을 미치는 요소가 변경될 때만 측정/배열 코드가 호출됩니다.)
- 144개 이상의 장식품은 지원되지 않으므로 이 한도에 근접할 위험이 있는 경우 컨트롤 템플릿이 더 적합합니다.
특정 예제에는 명확한 정답이 없습니다.
연결점의 위치를 지정하는 방법이 필요할 것이고, 제어 템플릿은 이미 항목 자체의 레이아웃을 정의하고 있기 때문에 연결점에 제어 템플릿을 사용하는 것이 좋습니다.반면에 연결 지점 정보가 데이터 기반이고 활성 컨트롤(또는 끌어다 놓은 컨트롤)에만 표시되는 경우에는 장식판을 사용하여 성능 이점을 얻고 개별 컨트롤 템플릿을 단순화하는 것이 더 나을 수 있습니다.
자동으로 배치된 라벨은 선이 단순한 직선이 아닌 경우 측도/배열 계산 관점에서 도너에 적합할 수 있지만, 잠재적으로 이 중 1만 개를 한 번에 볼 수 있다면 성능에 대해 걱정할 것입니다.
당신의 응용 프로그램에 대해 더 많이 알지 못하면 이 이상 말하기가 어렵습니다.
언급URL : https://stackoverflow.com/questions/2595166/when-should-i-use-adorners
'programing' 카테고리의 다른 글
프로젝트 파일을 버전 관리 상태로 유지해야 합니까? (0) | 2023.04.29 |
---|---|
특정 단어에 대한 Git 커밋 디프 또는 내용을 grep하는 방법 (0) | 2023.04.29 |
전체 배열을 지우는 방법은 무엇입니까? (0) | 2023.04.29 |
셸 스크립팅에서 문자열의 처음 두 문자를 추출하려면 어떻게 해야 합니까? (0) | 2023.04.29 |
한 디브를 다른 디브 위에 덧씌우는 방법 (0) | 2023.04.29 |