Ovo se moze postici na sledeci nacin:
1. Desni klik na projekat, Add > New item...
2. Dodaje se nova CustomControl (ne UserControl). Visual Studio ce dodati fajlove CustomControl1.cs i Themes\Generic.xaml
3. Otvoriti CustomControl1.cs i u liniji
public class CustomControl1 : Control zameniti Control sa CustomControl i sacuvati fajl.
4. Otvoriti Generic.xaml. Njegov default sadrzaj je:
Code:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1">
<Style TargetType="{x:Type local:CustomControl1}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:CustomControl1}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
5. Izmeniti XAML kod da odgovara potrebama. Na primer (dajem samo deo gde je menjano):
Code:
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<StackPanel>
<Label>Sadrzaj je ispod</Label>
<Border Background="Transparent" BorderBrush="DarkGray" BorderThickness="1" Padding="2">
<ContentPresenter Content="{TemplateBinding ContentControl.Content}" />
</Border>
</StackPanel>
</Border>
Najbitniji deo je
<ContentPresenter Content="{TemplateBinding ContentControl.Content}" />.
Na tom mestu ce biti ono sto se prilikom primene daje kao content.
6. Sada se moze primeniti kontrola kao npr. ovako:
Code:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="clr-namespace:WpfApplication1"
Title="Window1" Height="300" Width="300">
<Grid>
<my:CustomControl1>
<Button>test</Button>
</my:CustomControl1>
</Grid>
</Window>
Napomena: Ovo nije sasvim identicno onome sto sam pitao na pocetku, nije u pitanju panel, ali radi upravo ono sto mi je trebalo (i slicno je pitanom) pa sam ovde dao resenje.