I am creating a WPF user control like a window where most of the layout has been customized. But there are a few sections where I want users to post their controls. To do this, I believe that I need to set some dependency properties in my user control.
The output should be approximately the same.

User Management Code
public class Class1 : UserControl { public ContentControl Content1 { get { return (ContentControl)GetValue(Content1Property); } set { SetValue(Content1Property, value); } } // Using a DependencyProperty as the backing store for MyProperty. This enables animation, styling, binding, etc... public static readonly DependencyProperty Content1Property = DependencyProperty.Register("Content1", typeof(ContentControl), typeof(Class1), null); public ContentControl Content2 { get { return (ContentControl)GetValue(Content2Property); } set { SetValue(Content2Property, value); } } // Using a DependencyProperty as the backing store for Content2. This enables animation, styling, binding, etc... public static readonly DependencyProperty Content2Property = DependencyProperty.Register("Content2", typeof(ContentControl), typeof(Class1), null); public ContentControl Content3 { get { return (ContentControl)GetValue(Content3Property); } set { SetValue(Content3Property, value); } } // Using a DependencyProperty as the backing store for Content3. This enables animation, styling, binding, etc... public static readonly DependencyProperty Content3Property = DependencyProperty.Register("Content3", typeof(ContentControl), typeof(Class1),null); }
And the corresponding control xaml
<Style TargetType="{x:Type userControl:Class1}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="userControl:Class1"> <Grid ShowGridLines="True"> <Grid.ColumnDefinitions> <ColumnDefinition Width="10"></ColumnDefinition> <ColumnDefinition Width="Auto"></ColumnDefinition> <ColumnDefinition Width="10"></ColumnDefinition> <ColumnDefinition Width="Auto"></ColumnDefinition> <ColumnDefinition Width="10"></ColumnDefinition> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="10"></RowDefinition> <RowDefinition Height="Auto"></RowDefinition> <RowDefinition Height="10"></RowDefinition> <RowDefinition Height="Auto"></RowDefinition> <RowDefinition Height="10"></RowDefinition> <RowDefinition Height="Auto"></RowDefinition> <RowDefinition Height="10"></RowDefinition> </Grid.RowDefinitions> <TextBlock Grid.Row="1" Grid.Column="1" Text="First Content"></TextBlock> <ContentPresenter x:Name="firstContentPresenter" ContentSource="{TemplateBinding Content1}" Grid.Row="1" Grid.Column="3"></ContentPresenter> <TextBlock Grid.Row="3" Grid.Column="1" Text="First Content"></TextBlock> <ContentPresenter x:Name="secondContentPresenter" ContentSource="{TemplateBinding Content2}" Grid.Row="3" Grid.Column="3"></ContentPresenter> <TextBlock Grid.Row="5" Grid.Column="1" Text="First Content"></TextBlock> <ContentPresenter x:Name="thirdContentPresenter" ContentSource="{TemplateBinding Content3}" Grid.Row="5" Grid.Column="3"></ContentPresenter> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style>
And I'm trying to use it somewhat like this
<userControl:Class1 Width="200" Height="200" Background="GreenYellow"> <userControl:Class1.Content1> <Label>I am number 1</Label> </userControl:Class1.Content1> <userControl:Class1.Content2> <Label>I am number 2</Label> </userControl:Class1.Content2> <userControl:Class1.Content3> <Label>I am number 3</Label> </userControl:Class1.Content3> </userControl:Class1>
The output of the above code is nothing.

MegaMind
source share