1

在我的 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?或者这是一个错误的方法?

提前致谢,
弗兰克

4

1 回答 1

2

我建议创建一个继承自 ContentControl 的自定义控件。这是一篇关于 UserControls 和自定义控件的不错的博客文章

您需要创建一个“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>

于 2012-05-23T17:02:03.727 回答