克隆控件

时间:2010-02-16 07:11:43

标签: silverlight

我正在设计一个silverlight应用程序,其中我将在左侧有一个矩形控件,当我单击rectangel并拖动时,应创建矩形控件的副本并将其拖放到页面中。

任何人都可以帮我解决代码

1 个答案:

答案 0 :(得分:0)

为简单起见,我将省略拖拽内容,因为这个问题似乎主要是关于克隆方面。

所需的工具是DataTemplate类。您将要克隆的项目集放在资源字典中DataTemplate中。您可以使用ContentPresenter在左侧的堆栈面板中显示这些项目的实例。然后,您可以使用代码创建模板内容的实例,并将它们放在右侧的Canvas中。

示例

的Xaml: -

<UserControl x:Class="SilverlightApplication1.CloningStuff"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
  >
    <UserControl.Resources>
        <DataTemplate x:Key="Rectangle">
            <Rectangle Stroke="Blue" StrokeThickness="3" Fill="CornflowerBlue" Width="100" Height="75" />
        </DataTemplate>
    </UserControl.Resources>
  <Grid x:Name="LayoutRoot" Background="White">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <StackPanel>
            <ContentPresenter x:Name="Rectangle" ContentTemplate="{StaticResource Rectangle}" />
        </StackPanel>
        <Canvas x:Name="Surface" MouseLeftButtonDown="Surface_MouseLeftButtonDown" Grid.Column="1" Background="Wheat">

        </Canvas>
    </Grid>
</UserControl>

代码: -

public partial class CloningStuff : UserControl
{
    public CloningStuff()
    {
        InitializeComponent();
    }

    private void Surface_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        Canvas target = (Canvas)sender;
        Point p = e.GetPosition(target);

        Rectangle r = (Rectangle)((DataTemplate)Resources["Rectangle"]).LoadContent();
        Canvas.SetLeft(r, p.X);
        Canvas.SetTop(r, p.Y);

        target.Children.Add(r);

    }
}

这显示使用ContentPresenter显示您的矩形。代替拖放(其他地方有大量示例),此代码只是在用户在Canvas中单击时创建矩形的克隆。