У меня есть WPF ItemsControl с Canvas ItemPanel. Рисуя из внутреннего источника, он отображает множество автоматически сгенерированных прямоугольников.
На данный момент это выглядит так:
<Window
// .. NameSpaces
>
<Window.Resources>
<DataTemplate x:Key="binTemplate">
<Rectangle x:Name="Rect" VerticalAlignment="Bottom"
Canvas.Left="10" StrokeThickness="0">
// .. Databinding Height, Width, etc
</Rectangle>
</DataTemplate>
</Window.Resources>
<DockPanel x:Name="LayoutRoot" LastChildFill="True">
<ItemsControl
ItemsSource="{Binding Bins}"
ItemTemplate="{StaticResource binTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas MouseDown="Canvas_MouseDown" MouseMove="Canvas_MouseMove" MouseUp="Canvas_MouseUp">
<Rectangle x:Name="Selection" Canvas.Left="0" Canvas.Top="0" Visibility="Hidden" />
</Canvas>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</DockPanel>
</Window>
Я сейчас тоже пытаюсь реализовать поле выбора ... ну ... выберите мои прямоугольники. знак равно
Я попытался просто добавить блок в ItemsControl PanelTemplate и управлять им с помощью событий мыши Canvas, но, похоже, мне не разрешено это делать. Сообщение об ошибке: «Невозможно явно изменить коллекцию дочерних элементов Panel, которая используется как ItemsPanel для ItemsControl. ItemsControl создает дочерние элементы для Panel.»
Каков предпочтительный способ реализации такого поведения? Я думал о наложении другого холста (с использованием отрицательного поля) и рисовании там поля выделения, но это похоже на плохой взлом.
Заранее спасибо!