我们如何将Silverlight UserControl创建为ContainerControl



我需要在silverlight中将UserControl创建为ContainterControl(或模板),这样我就可以在其他silverlight页面中使用它来添加控件…

任何答案都是可观的。。。。感谢GK Prajapati

您想要创建的是一个Silverlight Templated Control(扩展ContentControl)。

MSDN上的示例/其他示例

快速启动:

C#MyControl.cs

public class MyControl: ContentControl
{
    public MyControl()
        : base()
    {
        this.DefaultStyleKey = typeof(MyControl);
    }
    public override void OnApplyTemplate()
    {
        base.OnApplyTemplate();
    }
}

XAML MyControl.XAML

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:MyControlNsp="clr-namespace:My.Control.NameSpace">
    <Style TargetType="UserToolkit:WarningBar">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="MyControlNsp:MyControl">
                    <Border>
                            <ContentControl
                                x:Name="content"
                                Content="{TemplateBinding Content}"
                                ContentTemplate="{TemplateBinding ContentTemplate}"
                                HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                                VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

编辑:
如果控件不同,则可以将ItemsControl与集合一起使用:

var myControl = new ItemsControl();
myControl.Items.Add(new TextBlock { Text = "My text block" });
myControl.Items.Add(new CheckBox { Content = "My check box" });
// Or with a collection of items
ObservableCollection<object> controls = new ObservableCollection<object>();
controls.Add(new TextBlock { Text = "My text block" });
controls.Add(new CheckBox { Content = "My check box" });
var myControl2 = new ItemsControl();
myControl2.ItemsSource = controls;

最新更新