2010-02-16 3 views
1

Je suis en train de concevoir une application Silverlight dans laquelle je vais avoir un contrôle rectangle sur le côté gauche, quand je clique sur le rectangle et faites glisser une copie du contrôle rectangle devrait être créé et glissé et déposé dans la page.clonage des contrôles

S'il vous plaît quelqu'un peut me aider avec le code

Répondre

0

Pour simplifier, je vais laisser les trucs glisser-déplacer puisque cette question semble principalement sur l'aspect de clonage.

L'outil requis est la classe DataTemplate. Vous placez dans un dictionnaire de ressources l'ensemble des éléments que vous souhaitez cloner chacun d'eux dans un DataTemplate. Vous pouvez utiliser ContentPresenter pour afficher les occurrences de ces éléments dans le panneau de pile de gauche. Vous pouvez ensuite utiliser le code pour créer des instances du contenu du modèle et les placer dans un Canvas sur la droite.

Exemple.

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> 

Code: -

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); 

    } 
} 

Cela montre à l'aide d'un ContentPresenter pour afficher votre rectangle. Au lieu du glisser-déposer (pour lequel il existe de nombreux exemples d'ailleurs), ce code crée simplement un clone du rectangle où l'utilisateur clique dans le canevas.