Splitting WPF interface across multiple Xaml files

I am trying to create a user interface using XAML. However, the file is quickly becoming very large and difficult to work with. What is the best way for splitting it across several files.

I would like to be able to set the content of an element such as a ComboBox to an element that is defined in a different xaml file (but in the same VS project).

thanks


Solution 1:

You can split a large user interface by defining UserControls.

Right-click on the solution tree, choose Add->New Item... then User Control. You can design this in the normal way.

You can then reference your usercontrol in XAML using a namespace declaration. Let's say you want to include your UserControl in a Window. In the following example I've added a UserControl named "Foo" to the namespace "YourCompany.Controls":

<Window x:Class="YourCompany.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:Controls="clr-namespace:YourCompany.Controls">

  <Controls:Foo ... />

For your specific example, you would make use of your usercontrol in a combobox by defining a DataTemplate that displayed the data within your usercontrol.

Solution 2:

You can split up XAML files by using a ResourceDictionary. The ResourceDictionary can be used to merge other files:

<Page.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="myresourcedictionary.xaml"/>
      <ResourceDictionary Source="myresourcedictionary2.xaml"/>
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
</Page.Resources>

In the ResourceDictionary, you can also declare Styles that you can use at your elements, such that the main XAML file gets smaller.

Another possibility to get a smaller XAML file is to define your own controls that you then use in your main app.

Solution 3:

You can also create a Page, instead of a UserControl. A Page can be hosted by the Window or by a Frame. Search for the pros and cons of a Page vs UserControl. It depends a bit on your requirements with respect to navigation which will suit your needs best.

Here is an example of using a Page in a Frame.