Question

I have some XAML to draw a logo and I want to re-use this in various other XAML files (it has no UI and requires no code). The top level of the logo XAML is a Canvas item.

To use the logo in other XAML files is it best to define this logo as an element in a ResourceDictionary or create a UserControl?

This seems easy with a UserControl, however I want to load my XAML files in with XamlReader so I would prefer to use resources so that these can be specified within the XAML. It seems possible to store items such as a Canvas in a ResourceDictionary but I am not sure how to reference them.

For example, I can define my logo as a ResourceDictionary element as follows:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Canvas x:Name="LayoutRoot" x:Key="Logo">
        <!-- My Logo -->
    </Canvas>
</ResourceDictionary>

But how can I use this Logo in my other XAML files - maybe I have got the wrong idea about resources?

Was it helpful?

Solution

I found the solution is a VisualBrush. I can define this in the ResourceDictionary as follows:

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<VisualBrush x:Key="Logo">
    <VisualBrush.Visual>
<Canvas x:Name="LayoutRoot" x:Key="Logo"> 
               <!-- My Logo --> 
             </Canvas> 

Then just use this VisualBrush where necessary.

OTHER TIPS

Typically, if you want to make a resource dictionary for this, you'd make a style. You could then drop a control, and style it with your resource, in any other xaml file you wished.

However, a UserControl would potentially be an easier option, since it would be a simple, reusable element you could drop in anywhere.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top