2011-08-26 5 views
0

마법사와 같은 것을 만들고 있는데, 몇 가지 사용자 정의 컨트롤을 사용하고 있습니다. 그러나 그 문제는 다음 요소를 대체하기 위해 그 요소에서 부모를 얻는 것입니다.WPF에서 사용자 정의 컨트롤을 변경하는 방법은 무엇입니까?

어떻게하면됩니까?

+0

조회 관리를 위해 PRISM을 조사하고 싶을 수 있습니다. 그것은 당신이 메인 윈도우의 영역을 정의 할 수있게하고, 다른 뷰로 RequestNavigate 할 때 사용자 컨트롤 뷰를 보여 주거나 숨길 것입니다. 얼핏보기에는 힘이 들지만, 일단 길을 잃으면 네비게이션 로직을 훨씬 쉽게 만듭니다. –

답변

0

5 개의 UserControls가 있다고 생각합니다. 마법사를 만드는 동안 새 UserControl을 눈금 안에 추가하고 동일한 부모 눈금에서 이전 UserControl을 제거해야합니다.

다음 함수는 자동으로 이전 UserControl을 제거하고 새 UserControl을 추가합니다.. 하지만 첫 번째 UserControl의 경우 MyParentPanel.Children.Add (myFirstUserControl);를 사용하여 부모에게 직접 추가 할 수 있습니다.

 private void AddNewUserControlAndAutoRemoveOldUserControl(UserControl control) 
     { 
      if (control != null) 
      { 
       Panel parent = control.Parent as Panel; 

       if (parent != null) 
       { 
        // Removing old UserControl if present 
        if(parent.Children.Count > 0) 
         parent.Children.RemoveAt(0); 

        parent.Children.Insert(0, control); 
       } 
      } 
     } 
} 

희망이 당신을 돕는다!

0

음, 다양한 방법으로 마법사를 수행 할 수 있지만 가장 간단한 방법은 기본 폼에서 UserControls를 관리하는 것입니다. 각 사용자 정의 컨트롤의 부모가 될 기본 폼에 영역을 추가 한 다음 필요한 경우 컨테이너에서 사용자 정의 컨트롤을 추가/제거하면됩니다.

0

Selector 나 ListBox를 사용하는 가장 우아한 방법입니다.

마법사에는 여러 페이지가 있으며 각 페이지에는 하나 이상의 정보가 표시되므로 일부 데이터에 바인딩 된 컨트롤이 있습니다. 즉, 페이지가 바인딩되는 데이터가 포함 된 "모델"을 고려해야합니다.

이제 각 페이지마다 고유 한 모델과 ListBox를 제공하는 이러한 모델 목록을 고려하십시오. 이 ListBox는 ItemTemplateSelector를 정의해야합니다. ItemTemplateSelector는 항목 데이터 (예 : 모델)에 대해 특정 DataTemplate을 선택할 수 있도록합니다.

이 기술의 가장 어려운 부분은 선택한 항목 (SelectedItem) 만 표시하도록 모양을 지정해야하는 ListBox의 컨트롤 템플릿을 만들고 정의하는 것입니다. 이와 같은 방법으로 현재 선택 영역 만 변경하면 마법사 페이지가 자동으로 표시됩니다.

이 기술은 과도한 것처럼 보이지만 "고전적"접근 방식과 비교하면 상당히 편리합니다. 귀하의 코드는 훨씬 깨끗하고 디버깅하기 쉬우 며 재사용이 용이하며 모듈 간 분리가 용이합니다. 모든 것은 훨씬 더 많은 신뢰성과 빠른 개발을 제공 할 것입니다.

관련 문제