2010-07-21 4 views
1

저는 WPF를 처음 접했고 다음 시나리오를 가지고 있습니다.런타임에 컨트롤을 대체하는 가장 좋은 방법은 무엇입니까?

다른 응용 프로그램 상태가 다른 시간에 다른 컨트롤 집합을 표시해야하는 영역이있는 응용 프로그램이 있습니다.

WPF의 접근 방식이 궁금합니다.

winforms에서 컨트롤을 런타임에 보이게하거나 보이지 않게 할 것입니다. 컨트롤이 너무 많으면 Panel/UserControls에 그룹화하고 표시하거나 숨 깁니다.

내 직감은 WPF에서 더 좋은 방법이 있다고 말합니다.

답변

2

WPF에서이 작업을 수행 할 수있는 옵션이 많이 있습니다. Visibility를 설정하여 컨트롤의 개별 또는 그룹을 숨기고 표시하는 것 외에도 다른 DataTemplate을 사용하여 각 상태에 대한 컨트롤 집합을 포함하고 이들 사이를 전환 할 수 있습니다. ContentTemplate을 설정할 수있는 ContentControl 만 있으면됩니다. 그런 다음 ContentTemplate 값을 트리거, 바인딩, 코드에서 사용하거나 ContentTemplateSelector를 사용하여 템플릿을 선택하여 다른 DataTemplates로 전환 할 수 있습니다.

+0

다른 모델을 사용하고 영역을 변경하는 데 다른 논리가있는 경우 데이터 형식이 유용할까요? – Kugel

+0

확실히. 바인딩 소스에 사용되는 클래스를 전환하면 훨씬 유용하게 사용할 수 있습니다. 예를 들어 두 개의 UI 상태를 구동하는 두 개의 서로 다른 ViewModel 클래스가있는 경우 두 개의 DataTemplates를 Resources로 정의 할 수 있습니다. DataTypes 및 x : Key가 없습니다. 그런 다음 ViewModel 객체 중 하나를 ContentControl의 Content 속성에 할당하면 올바른 템플릿이 자동으로 선택됩니다. –

1

Visibility 속성은 이전 winforms 습관을 완벽하게 설명합니다.

Visual States도보고 싶을 것입니다. 이렇게하면 여러 컨트롤을 숨기거나 표시하고 다른 속성 (예 : 활성화 상태, 글꼴 색상)을 변경할 수도 있습니다.

관련 문제