Tworzę kontrolkę użytkownika WPF, podobnie jak okno, w którym została ustawiona większość układu. Ale jest kilka sekcji, w których chcę, aby użytkownicy umieszczali swoje kontrolki. Aby to osiągnąć, uważam, że muszę ujawnić pewne właściwości zależności w mojej kontroli użytkownika.Prezentery wielu treści w formancie użytkownika WPF
Wyjście powinno być trochę jak ten
kodeksu kontrolą użytkownika
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);
}
a odpowiednim XAML kontroli jest
<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>
I próbuję użyj go w taki sposób, jak
<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>
Dane wyjściowe powyższego kodu są niczym.
Całkowicie zamieniłem kod kopalni na twój. Teraz przestał renderować siatkę. Proszę również dodać kod dla window.xaml, wtedy to może działać. – MegaMind
@MegaMind - zaktualizowano. –
Nie wierzę, że tęskniłem za tym. W każdym razie wielkie dzięki za pomoc. – MegaMind