You can include the XAML as content or as a file on the web server and use XamlReader.Load to dynamically load and create Xaml content. There's not a control that can do what you want directly (but it would be simple to wrap the functionality described in the link).
For example:
<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Path x:Name="top" Width="24" Height="12" Stretch="Fill" Fill="#FF065F02" Stroke="#10000000" Data="F1 M 0,6L 12,12L 24,6L 12,0L 0,6 Z "/>
</Canvas>
Then, using whatever your favorite trick is for loading Content, get the above string and Load it:
Canvas c = XamlReader.Load(myXaml) as Canvas;
Then, add the canvas as a child to the parent control (or whatever the type is you want to use, as it doesn't need to be a Canvas).
var e = from a in XDocument.Load("resources.xml").Descendants("assets")
where (string) a.Attribute("id") == desiredId select a.FirstNode;
My Xaml in the above case was in a file marked as "Content" and used a XDocument to load it based on an ID (My XML document has multiple free floating assets all tagged with an ID):
<assets>
<asset id="top">
<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Path x:Name="top" Width="24" Height="12" Stretch="Fill" Fill="#FF065F02" Stroke="#10000000" Data="F1 M 0,6L 12,12L 24,6L 12,0L 0,6 Z "/>
</Canvas>
</a>
...