Я могу визуализировать коллекцию предметов и перемещать их с помощью мыши.У меня возникли проблемы с автоматическим изменением размера элементов canvas.Попробуйте код как есть и посмотрите, как отображаются прямоугольники и как их можно перетаскивать мышью.Обратите внимание, что они ограничены родительскими границами (400x400).Затем найдите закомментированную строку <!--<Canvas>-->
, раскомментируйте ее и закомментируйте строку над ней <Canvas Height="400" Width="400">
.Теперь обратите внимание, как прямоугольники отображаются правильно, но как только вы перетащите один из них, они улетят в верхний левый угол и больше не будут перемещаться!Пожалуйста, помогите!
Вам понадобятся эти пространства имен
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
Полный XAML приведен ниже, поместите его на странице или в элементе управления
<Grid x:Name="LayoutRoot">
<UserControl>
<UserControl.Resources>
<DataTemplate x:Key="ItemTemplateKey">
<Canvas Height="400" Width="400">
<!--<Canvas>-->
<Rectangle Height="50" Width="50" Fill="Red">
<i:Interaction.Behaviors>
<ei:MouseDragElementBehavior ConstrainToParentBounds="True"/>
</i:Interaction.Behaviors>
</Rectangle>
</Canvas>
</DataTemplate>
</UserControl.Resources>
<Grid x:Name="LayoutRoot2">
<ItemsControl
ItemsSource="{Binding anArrayOfThreeOrFourThingsInTheVM}"
ItemTemplate="{StaticResource ItemTemplateKey}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Grid>
</UserControl>
</Grid>
В ВМили код, приведенный ниже, предоставляет коллекцию для источника предметов, к которой можно привязать:
public int[] anArrayOfThreeOrFourThingsInTheVM { get { return new int[] { 1, 2, 3 }; } }
Редактировать : Милый ребенок, Иисус!В последний раз перед сном я попытался заменить холст сеткой, и все заработало!
Вот новый рабочий xaml на случай, если у кого-то еще возникнет такая же проблема:
<Grid x:Name="LayoutRoot">
<UserControl>
<UserControl.Resources>
<DataTemplate x:Key="ItemTemplateKey">
<Grid>
<Rectangle Height="50" Width="50" Fill="Red">
<i:Interaction.Behaviors>
<ei:MouseDragElementBehavior ConstrainToParentBounds="True"/>
</i:Interaction.Behaviors>
</Rectangle>
</Grid>
</DataTemplate>
</UserControl.Resources>
<Grid x:Name="LayoutRoot2">
<ItemsControl
ItemsSource="{Binding anArrayOfThreeOrFourThingsInTheVM}"
ItemTemplate="{StaticResource ItemTemplateKey}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Grid>
</UserControl>
</Grid>