我正在设计一个silverlight应用程序,其中我将在左侧有一个矩形控件,当我单击rectangel并拖动时,应创建矩形控件的副本并将其拖放到页面中。
任何人都可以帮我解决代码
答案 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中单击时创建矩形的克隆。