This article discusses how to create a User Control in XAML and WPF using Visual Studio 2008 and how to use it in a WPF application. The first part of this article creates a XamlFileBrowser user control that is used to browse a file on a system and second part shows how to use it in an application.
The XamlFileBrowser Control
Create a XAML application using Visual Studio 2008 and add a new item by right clicking on the project, select Add >> New Item from the menu and select User Control from the available templates. See in Figure 1. Before clicking the Add button, change the name of XAML file in the below text box to the name of your control. I change my file name to XamlFileBrowser.

This action adds a UserControl1.xaml file to your project.
- <UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- mc:Ignorable="d" x:Class="XamlFileBrowser.UserControl1"
- x:Name="UserControl1"
- d:DesignWidth="397" d:DesignHeight="39">
- <Grid x:Name="LayoutRoot">
- </Grid>
- </UserControl>
Designing the XamlFileBrowser Control
Now I add a button and a TextBox control to the user control and change names of the TextBox and the Button controls to FBCTextBox and FBCButton respectively. The design of the control looks like Figure 2.

As you can see from the below code, I also add a Button click event handler and TextBox's text changed event handler.
- <TextBox x:Name="FBCTextBox" Margin="4,10.313,137,4.001" Text="TextBox" TextWrapping="Wrap" Grid.ColumnSpan="2" TextChanged="FBCTextBox_TextChanged" />
- <Button x:Name="FBCButton" HorizontalAlignment="Right" Margin="0,8,13,4" Width="111" Content="Browse" Grid.Column="1" Click="FBCButton_Click" />
- <UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- mc:Ignorable="d"
- x:Class="McXamlLib.XamlFileBrowser"
- x:Name="XAMLFileBrowserControl"
- d:DesignWidth="397" d:DesignHeight="39">
- <Grid x:Name="LayoutRoot" Height="42" Width="504">
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="0.352*"/>
- <ColumnDefinition Width="0.648*"/>
- </Grid.ColumnDefinitions>
- <TextBox x:Name="FBCTextBox" Margin="4,10.313,137,4.001" Text="TextBox" TextWrapping="Wrap" Grid.ColumnSpan="2" TextChanged="FBCTextBox_TextChanged" />
- <Button x:Name="FBCButton" HorizontalAlignment="Right" Margin="0,8,13,4" Width="111" Content="Browse"
- Grid.Column="1" Click="FBCButton_Click" />
- </Grid>
- </UserControl>
Adding code to the XamlFileBrowser Control
Now, we are going to add the code to the control.
First, I create a public property called FileName and sets and gets text of the FBCTextBox control. The property code looks like following:
- public string FileName
- {
- get { return FBCTextBox.Text; }
- set { FBCTextBox.Text = value; }
- }
- private void FBCButton_Click(object sender, RoutedEventArgs e)
- {
- Microsoft.Win32.OpenFileDialog openFileDlg = new Microsoft.Win32.OpenFileDialog();
- if (openFileDlg.ShowDialog() == true)
- this.FileName = openFileDlg.FileName;
- }
- public event EventHandler<EventArgs> FileNameChanged;
- private void FBCTextBox_TextChanged(object sender, TextChangedEventArgs e)
- {
- e.Handled = true;
- if (FileNameChanged != null)
- FileNameChanged(this, EventArgs.Empty);
- }
The XAMLFileBrowser Control Host Application
Using a user control in XAML is pretty simple. I use a WPF Application to test the control.
Create a WPF application project and copy the control code files to your project.
After that, you need to add namespace of the library in which the user control is defined. In our case, the library was McXamlLib. Add the following namespace within the Window or Page tag of your application.
- xmlns:local="clr-namespace:McXamlLib"
- <Grid x:Name="LayoutRoot">
- <local:XamlFileBrowser />
- </Grid>
- <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:local="clr-namespace:McXamlLib"
- x:Class="XAMLFileBrowser.Window1"
- x:Name="Window"
- Title="Window1"
- Width="565" Height="310">
- <Grid x:Name="LayoutRoot">
- <local:XamlFileBrowser />
- </Grid>
- </Window>

Figure 3. The XamlFileBrowser control in action
Forthcoming
Using the same approach, I am creating an interactive XamlFileBrowser control that will have styles and interactive UI as well as new features such as MRUs. After that, I will use this control in one of my Graphics Designer applications I am working on. Stay tuned. As always, all comments and critics are most welcome. Please post them at the bottom of this article using Post Comment button.
Summary
In this article, we saw how easy it is to create a user control in XAML and WPF application programming model. First, we created a user control and later we created a host application to test our user control.

Dinesh KudalePosted Mar 9, 2022, 12:50 PM
Thank you for such a nice article. You have mentioned the following line in your above article: "Create a WPF application project and copy the control code files to your project." As per my knowledge, if we have created user control in the project and using it within the same project, then we can use it by importing namespace on that particular Window. But if we have created user control in a separate project (means WPF User control Library project) and we want to use it in another project or solution, then we need to add reference of .dll of that project (means WPF User control Library project) into our project and then add namespace on that Window.
Mahesh ChandPosted May 30, 2012, 10:27 AM
You're welcome Azim
RanjithKumar chiguruvadaPosted May 14, 2012, 6:22 AM
ok
Azim ZahirPosted Feb 1, 2012, 4:03 AM
Thanks for posting this useful article.
Aby KurianPosted Jul 25, 2009, 12:33 AM
can u tell me how to put controls inside usercontrol like grid,Panel etc
BernardPosted Mar 23, 2009, 10:27 AM
How do we retreive the text and how do we receive the event FileNameChanged?