When referencing controls from another assembly in XAML, you probably use the xmlns:myAlias="clr-namespace:MyNamespace;assembly=MyAssembly" syntax.
Last week I discovered you also have another option, you can use an Uri instead of a namespace reference thanks to the XmlnsDefinition attribute. (Read more about this attribute on MSDN). It allows you to map a XAML namespace to one ore more assembly namespaces.
So how do you use it?
- Open the AssemblyInfo.cs file under the Properties folder of your project.
- Add the following line for each namespace in your assembly you want to map:
1: [assembly: AssemblyTitle("WPF Namespace Sample")]
2: [assembly: AssemblyDescription("")]
3: [assembly: AssemblyConfiguration("")]
4: [assembly: AssemblyCompany("")]
5: [assembly: AssemblyProduct("WPF Namespace Sample")]
6: [assembly: AssemblyCopyright("Copyright © 2010")]
7: [assembly: AssemblyTrademark("")]
8: [assembly: AssemblyCulture("")]
9: [assembly: XmlnsDefinition("http://myApp/schemas/2010/xaml", "WPF.Samples.Controls")]
10: [assembly: XmlnsDefinition("http://myApp/schemas/2010/xaml", "WPF.Samples.Commands")]
You can use this reference then inside another project:
1: <UserControl
2: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4: xmlns:wpfSample="http://myApp/schemas/2010/xaml" >