tags:

views:

810

answers:

2

How can I load WPF based user control in WPF based window dynamically (using code at runtime)?

+1  A: 

I'd highly recommend having a look at Prism, since composite user interfaces is what it's for. However, since this would require you refactoring your entire application, I'll also answer your question directly.

If you want a single user control in a container, put a ContentControl in your XAML and then set the Content property. If you are using a view model, you could bind Content to a FrameworkElement property on the view model:

contentControlInstance.Content = new CustomUserControl();

If you want multiple controls in a list, use an ItemsControl and assign an ObservableCollection<> to the ItemsSource property. If you are using a view model, you could bind ItemsSource to an ObservableCollection property on the VM.

Then you can just add/remove views from that ObservableCollection:

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

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

private void AddView(FrameworkElement frameworkElement)
{
    views.Add(frameworkElement);
}
Richard Szalay
+1  A: 

For adding multiple controls you need container.

Suppose you have a StackPanel container "myStack"

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

You can create control dynamically and add it to container. See code below

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);    
}
Sasikumar D.R.