2009-11-21 3 views

답변

21

나는 복합 사용자 인터페이스가 무엇인지 알고 있기 때문에 Prism을 살펴볼 것을 적극 권장합니다. 그러나 이렇게하면 전체 응용 프로그램을 리팩토링해야하므로 직접 질문에 답변 할 것입니다.

컨테이너에 단일 사용자 정의 컨트롤을 사용하려면 ContentControl을 XAML에 넣은 다음 Content 속성을 설정하십시오. 당신이 목록에서 여러 컨트롤을 원하는 경우

contentControlInstance.Content = new CustomUserControl(); 

는 ItemsControl에를 사용하고 ItemsSource 속성에 ObservableCollection에 <>을 지정 : 당신이보기 모델을 사용하는 경우, 뷰 모델에 FrameworkElement 속성 내용 결합 수 . 뷰 모델을 사용하는 경우 ItemsSource를 View Model의 ObservableCollection 속성에 바인딩 할 수 있습니다.

그럼 그냥 그 ObservableCollection에에서보기를 추가/제거 할 수 있습니다

private ObservableCollection<FrameworkElement> views = 
    new ObservableCollection<FrameworkElement>(); 

private void Initialize() 
{ 
    itemsControl.ItemsSource = views; 
} 

private void AddView(FrameworkElement frameworkElement) 
{ 
    views.Add(frameworkElement); 
} 
4

여러 컨트롤을 추가하려면 당신이 용기가 필요합니다.

당신이 동적으로 컨트롤을 생성하고 컨테이너에 추가 할 수 있습니다 StackPanel에 용기 "myStack"

<Window ..> 
    <StackPanel Name="MyStack" /> 
</Window> 

있다고 가정합시다. 아래 코드 참조

void AddButtons() 
{ 
    Button B1=new Button(),B2=new Button(), B3=new Button(); 
    B1.Content="Hello"; 
    B2.Content="First";  
    B3.content="Application"; 
    // Now you can set more properties like height, width, margin etc... 
    MyStack.Children.Add(B1); 
    MyStack.Children.Add(B2); 
    MyStack.Children.Add(B2);  
} 
3

또는 바인딩을 사용하십시오. ContentControl과 바인딩 (Prism이나 Caliburn Micro와 같은 툴킷이하는 것입니다)을 사용하여 여러 WPF 컨트롤을 단일 WPF 윈도우에 표시하는 방법을 보여주는 정말 어려운 예가 있습니다.

XAML :

<UserControl x:Class="ViewA"> 
    ... 
<UserControl/> 

<UserControl x:Class="ViewB"> 
    ... 
<UserControl/> 

코드 :

void ShowViewModelDialog (object viewModel) 
{ 
    var host = new MyViewHost(); 
    FrameworkElement control = null; 
    string viewModelName = viewModel.GetType().Name; 
    switch (viewModelName) 
    { 
    case ("ViewModelA"): 
     control = new ViewA(); 
     break; 
    case ("ViewModelB"): 
     control = new ViewB(); 
     break; 
    default: 
     control = new TextBlock {Text = String.Format ("No view for {0}", viewModelName); 
     break; 
    } 

    if (control!=null) control.DataContext = viewModel; 
    host.DataContext = control; 
    host.Show(); // Host window will show either ViewA, ViewB, or TextBlock. 
} 
관련 문제