Wpf 如何动态加载用户控件?
如何在窗口中动态加载用户控件(在运行时使用代码)?我强烈建议您看看,因为复合用户界面就是它的用途。然而,因为这需要重构整个应用程序,所以我也将直接回答您的问题Wpf 如何动态加载用户控件?,wpf,user-controls,code-behind,Wpf,User Controls,Code Behind,如何在窗口中动态加载用户控件(在运行时使用代码)?我强烈建议您看看,因为复合用户界面就是它的用途。然而,因为这需要重构整个应用程序,所以我也将直接回答您的问题 <UserControl x:Class="ViewA"> ... <UserControl/> <UserControl x:Class="ViewB"> ... <UserControl/> 如果要在容器中使用单用户控件,请在XAML中放置ContentControl,然后设
<UserControl x:Class="ViewA">
...
<UserControl/>
<UserControl x:Class="ViewB">
...
<UserControl/>
如果要在容器中使用单用户控件,请在XAML中放置ContentControl,然后设置Content属性。如果使用的是视图模型,则可以将内容绑定到视图模型上的FrameworkElement属性:
contentControlInstance.Content = new CustomUserControl();
<UserControl x:Class="ViewA">
...
<UserControl/>
<UserControl x:Class="ViewB">
...
<UserControl/>
如果希望列表中有多个控件,请使用ItemsControl并将ObservableCollection分配给ItemsSource属性。如果使用的是视图模型,则可以将ItemsSource绑定到视图模型上的ObservableCollection属性
<UserControl x:Class="ViewA">
...
<UserControl/>
<UserControl x:Class="ViewB">
...
<UserControl/>
然后,您可以从该ObservableCollection添加/删除视图:
private ObservableCollection<FrameworkElement> views =
new ObservableCollection<FrameworkElement>();
private void Initialize()
{
itemsControl.ItemsSource = views;
}
private void AddView(FrameworkElement frameworkElement)
{
views.Add(frameworkElement);
}
<UserControl x:Class="ViewA">
...
<UserControl/>
<UserControl x:Class="ViewB">
...
<UserControl/>
私有ObservableCollection视图=
新的可观察集合();
私有void初始化()
{
itemsControl.ItemsSource=视图;
}
私有void AddView(FrameworkElement FrameworkElement)
{
添加(框架元素);
}
用于添加您需要的多个控件
<UserControl x:Class="ViewA">
...
<UserControl/>
<UserControl x:Class="ViewB">
...
<UserControl/>
假设您有一个StackPanel容器“myStack”
<UserControl x:Class="ViewA">
...
<UserControl/>
<UserControl x:Class="ViewB">
...
<UserControl/>
或者使用绑定。下面是一个非常粗糙的示例,展示了如何在单个WPF窗口中使用ContentControl和binding显示不同的WPF控件(这是像Prism或Caliburn Micro这样的工具包所做的)
<UserControl x:Class="ViewA">
...
<UserControl/>
<UserControl x:Class="ViewB">
...
<UserControl/>
XAML:
<UserControl x:Class="ViewA">
...
<UserControl/>
<UserControl x:Class="ViewB">
...
<UserControl/>