런타임시 코드를 사용하여 WPF 기반 윈도우에서 WPF 기반 사용자 정의 컨트롤을 동적으로로드 할 수 있습니까?WPF : 어떻게 사용자 정의 컨트롤을 동적으로로드합니까?
11
A
답변
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.
}
관련 문제
- 1. 어떻게 UserControls를 동적으로로드합니까?
- 2. ASP.net에서 WPF 사용자 정의 컨트롤을 사용하는 방법
- 3. 사용자 정의 유형의 속성이있는 WPF 컨트롤을 바인딩합니다.
- 4. WPF MVVM에서 사용자 정의 컨트롤을 사용하는 방법
- 5. WPF 내가 가진 사용자 정의 WPF 컨트롤을 가지고
- 6. WPF 사용자 컨트롤을 시뮬레이트하는 도구?
- 7. jquery 함수를 어떻게 동적으로로드합니까?
- 8. 어떻게 nsarray에서 uitableview를 동적으로로드합니까
- 9. UIKIt에서 사용자 정의 컨트롤을 어떻게 작성합니까?
- 10. 내 사용자 지정 WPF 사용자 정의 컨트롤을 삭제해야하는 시점은 언제입니까?
- 11. 사용자 정의 컨트롤을 얻으려면 어떻게해야합니까?
- 12. WPF : 도구 상자에서 내 사용자 정의 컨트롤을 볼 수 없습니다.
- 13. WPF - 사용자 정의 컨트롤 ScrollViewer
- 14. MS Word에 사용자 정의 사용자 정의 컨트롤을 포함시키는 방법은 무엇입니까?
- 15. 다른 사용자 컨트롤에서 asp.net 사용자 정의 컨트롤을 어떻게 사용합니까?
- 16. 사용자 정의 컨트롤을 모양이없는 것으로 만들어야합니까?
- 17. 복합 사용자 정의 컨트롤을 구현하는 모범 사례 WPF
- 18. 사용자 정의 WPF 대화 상자 컨트롤을 사용할 때의 크기 문제
- 19. WPF : 복잡한 사용자 정의 컨트롤을 만드는 방법? (GDI +와 같은)
- 20. WPF 바인딩 사용자 정의 컨트롤
- 21. wpf 사용자 정의 블로킹 스타일
- 22. 사용자 정의 컨트롤을 동적으로로드하는 중
- 23. 로드 사용자 정의 컨트롤을 동적으로
- 24. Wpf 사용자 정의 컨트롤
- 25. WPF 내가 가계도를 표시 할 사용자 정의 컨트롤을 쓰고 싶었다 사용자 정의 컨트롤
- 26. WPF : 다른 사용자 정의 컨트롤의 ItemTemplate에서 사용자 정의 컨트롤을 사용하는 중 오류
- 27. WPF : 어떻게 사용자 정의 컨트롤 항목에 포커스를 설정할 수 있습니까?
- 28. Asp.net에서 사용자 정의 컨트롤을 동적으로 추가합니다.
- 29. 재배치 가능 자식 컨트롤을 통한 사용자 지정 WPF 사용자 컨트롤
- 30. 도크 패널에서 사용자 정의 컨트롤을 제거하는 방법