Click here to Skip to main content
15,879,613 members
Articles / Silverlight / Silverlight4
Tip/Trick

Embedding Content inside a UserControl from its Parent Control in Silverlight 4

Rate me:
Please Sign up or sign in to vote.
5.00/5 (2 votes)
6 Oct 2010CPOL 17.8K   1   1
How to embed Content for a UserControl when consumed by another control using ContentProperty
This trick explains how you can allow to embed Content for a UserControl when consumed by another control by making use of the ContentProperty.

Introduction

Whenever you create your own UserControl in Silverlight, it bothered me that when consuming the usercontrol in a parent control (e.g., the page), it is not allowed to access the user control's content.
Example: assume the following code as part of a consumer control:

XML
<Grid x:Name="LayoutRoot">
  <MyApp:MyUserControl>
    <TextBlock Text="This is consumer defined content!"></TextBlock>
  </MyApp:MyUserControl>
</Grid>

You get the following error: "The property 'Content' does not exist on the type....".

The problem is that the Content property is a private property of the UserControl.
However, there is a workaround for this problem: the ContentProperty attribute.

Here are the steps to follow:

  1. In your UserControl.xaml, add a ContentPresenter control that will hold the user defined content. Name the ContentPresenter 'contentPresenter'.
  2. In your UserControl codebehind, define a new property:
    C#
    public object UserContent
    {
        get { return contentPresenter.Content; }
        set { contentPresenter.Content = value; }
    }
  3. Now for the trick: add the following attribute to the class:
    C#
    [ContentProperty("UserContent")]<br />

There, that's it! You can now create your layout within the UserControl XAML and embed the actual user content at any position within your user control.

History

  • 7th October, 2010: Initial version

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Architect Rubicon
Netherlands Netherlands
Currently Herre Kuijpers is employed at Rubicon. During his career he developed skills with all kinds of technologies, methodologies and programming languages such as c#, ASP.Net, .Net Core, VC++, Javascript, SQL, Agile, Scrum, DevOps, ALM. Currently he fulfills the role of software architect in various projects.

Herre Kuijpers is a very experienced software architect with deep knowledge of software design and development on the Microsoft .Net platform. He has a broad knowledge of Microsoft products and knows how these, in combination with custom software, can be optimally implemented in the often complex environment of the customer.

Comments and Discussions

 
QuestionThanks Pin
Phylum12325-May-12 3:35
Phylum12325-May-12 3:35 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.