如何在基於WPF的窗口中動態加載基於WPF的用戶控件(在運行時使用代碼)?WPF:我如何動態加載用戶控件?
11
A
回答
21
我強烈建議看看Prism,因爲複合用戶界面是它的用途。但是,由於這需要您重構整個應用程序,因此我也會直接回答您的問題。
如果您想在容器中使用單個用戶控件,請將ContentControl放入您的XAML中,然後設置Content屬性。如果您使用的是視圖模型,你可以綁定的內容對視圖模型FrameworkElement的屬性:
contentControlInstance.Content = new CustomUserControl();
如果你想在一個列表中的多個控件,使用一個ItemsControl和一個ObservableCollection <>分配給ItemsSource屬性。如果您正在使用視圖模型,則可以將ItemsSource綁定到視圖模型上的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. 負載WPF用戶控件動態
- 2. 停止在WPF的動畫,動態加載的用戶控件
- 3. 如何動態加載包含asp控件的用戶控件
- 4. 如何使用WPF中的滾動條加載用戶控件?
- 5. 動態加載用戶控件
- 6. 動態加載用戶控件
- 7. 動態加載的用戶控件
- 8. 面板和用戶控件vs動態加載用戶控件
- 9. WPF:加載動畫用戶控件加載
- 10. 如何在動態加載時註冊用戶控件事件
- 11. 如何動態添加用戶控件中的用戶控件
- 12. 在WPF中加載用戶控件
- 13. 如何從一個動態加載的用戶控件
- 14. 基於其他控制事件動態加載用戶控件
- 15. 加載用戶控制動態
- 16. 動態加載控件
- 17. 控制動態AJAX用戶控件的加載順序
- 18. 在視圖狀態下持久動態加載用戶控件
- 19. 保存加載用戶控件動態視圖狀態
- 20. WPF:如何在動態創建的WPF窗口中動態添加控件
- 21. 動態加載WindowsForms控件添加到WPF WindowsFormsHost
- 22. WPF - 動畫用戶控件
- 23. c#wpf如何引用一個動態添加的控件
- 24. 綁定到動態加載的用戶控件中的事件
- 25. 如何獲得用戶控制數據動態加載時
- 26. 如何將事件從動態加載用戶控件引發到頁面?
- 27. 如何處理動態加載的用戶控件上的事件?
- 28. ASP.NET如何動態加載用戶控件對彼此事件做出響應?
- 29. 如何加速在wp7中動態添加用戶控件
- 30. 如何規模的動畫添加到加載用戶控件