Tell me more ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

I am creating a WPF user control, its like a window where most of the layout has been setup. But there are few sections where I want users to place their controls. To achieve this I believe I need to expose some dependency properties in my user control.

Output should be somewhat like this

enter image description here

Code for user control

   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 respective xaml of the control is

 <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 Content1}"  Grid.Row="3" Grid.Column="3"></ContentPresenter>

                    <TextBlock Grid.Row="5" Grid.Column="1" Text="First Content"></TextBlock>
                    <ContentPresenter x:Name="thirdContentPresenter"  ContentSource="{TemplateBinding Content1}"  Grid.Row="5" Grid.Column="3"></ContentPresenter>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

And I am 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>
share
add comment (requires an account with 50 reputation)

Know someone who can answer? Share a link to this question via email, Google+, Twitter, or Facebook.

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.