【发布时间】:2010-05-26 09:05:51
【问题描述】:
我有一个带有 Canvas ItemPanel 的 WPF ItemsControl。从内部源绘制,它会显示许多自动生成的矩形。
到目前为止,它看起来像这样:
<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 鼠标事件控制它,但似乎我不允许这样做。错误消息是“无法显式修改用作 ItemsControl 的 ItemsPanel 的 Panel 的 Children 集合。ItemsControl 为 Panel 生成子元素。”
实现这种行为的首选方法是什么?我考虑过覆盖另一个画布(使用负边距)并在其中绘制选择框,但这似乎是一个糟糕的 hack。
提前致谢!
【问题讨论】:
标签: c# wpf itemscontrol