клонирование элементов управления - PullRequest
1 голос
/ 16 февраля 2010

Я разрабатываю приложение silverlight, в котором у меня будет элемент управления прямоугольником с левой стороны, когда я щелкаю прямоугольник и перетаскиваю копию элемента управления прямоугольником, его необходимо создать и перетащить на страницу.

Пожалуйста, кто-нибудь может мне помочь с кодом

1 Ответ

0 голосов
/ 16 февраля 2010

Для простоты я собираюсь пропустить материал Drag-Drop, так как этот вопрос кажется в основном касающимся аспекта клонирования.

Необходимым инструментом является класс 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...