Создайте пользовательский элемент управления, который может содержать дочерний элемент (например, Border-Element)
В моем приложении Silverlight 4 я хочу создать простой пользовательский элемент управления, который помимо прочего может содержать другой элемент управления. Примером того, что я хочу, является пограничный контроль. Вы можете поместить любой другой элемент управления (точно ОДИН другой элемент управления) "в" Border-Control, чтобы Border-Control содержал другой пользовательский элемент управления и отображал его содержимое. Что мне нужно сделать, чтобы создать пользовательский элемент управления с этой возможностью? Идея состоит в том, чтобы поместить другой элемент управления в ContentPresenter в мой пользовательский элемент управления, например:
<Grid x:Name="LayoutRoot">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock x:Name="TextBlockHeader" Text="{Binding Title, ElementName=userControl}" HorizontalAlignment="Left" Foreground="White" Margin="5,0"/>
<ContentPresenter x:Name="ContentPresenterObject" Grid.Row="1" />
</Grid>
Теперь, что нужно сделать, чтобы иметь возможность добавить (в Expression Blend) дочерний элемент управления в мой UserControl и как связать его с ContentPresenter? Или это неправильный подход?
Заранее спасибо,
Фрэнк
1 ответ
Я бы порекомендовал создать пользовательский элемент управления, который наследуется от ContentControl. Вот хороший пост в блоге, рассказывающий о пользовательских элементах управления и пользовательских элементах управления.
Вам нужно будет создать "Generic.xaml", который определит ваш xaml, и класс cs, который определит ваш класс.
public class CustomControl: ContentControl
{
public CustomControl()
{
this.DefaultStyleKey = typeof(CustomControl);
}
}
Ваш класс xaml будет выглядеть примерно так:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MyApp">
<Style TargetType="local:CustomControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:CustomControl">
<Grid x:Name="LayoutRoot">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock x:Name="TextBlockHeader" Text="{Binding Title,
ElementName=userControl}" HorizontalAlignment="Left"
Foreground="White" Margin="5,0"/>
<ContentPresenter x:Name="ContentPresenter" Grid.Row="1"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>