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:
<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:
- In your UserControl.xaml, add a
ContentPresenter
control that will hold the user defined content. Name the ContentPresenter
'contentPresenter
'. - In your
UserControl codebehind
, define a new property:
public object UserContent
{
get { return contentPresenter.Content; }
set { contentPresenter.Content = value; }
}
- Now for the trick: add the following attribute to the class:
[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
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.