iv'e得到了几个绑定项目控件,它们都起到了放置目标的作用 我需要能够在这些项目控件之间拖放项目。
问题在于拖放框架
不会将项目控件识别为放置目标ItemsControl面板:
<ItemsPanelTemplate x:Key="TopPipePanelTemplate">
<StackPanel></StackPanel>
</ItemsPanelTemplate>
DataTemplate:
<DataTemplate x:Key="PipeDataItem" >
<Ellipse Width="45" Height="45" Fill="{Binding IsMine,Converter={StaticResource MyCheckerOwnerToColorConverter}}"></Ellipse>
</DataTemplate>
ItemsControl样式:
<Style TargetType="{x:Type ItemsControl}" x:Key="ItemsControlStyle">
<Setter Property="ItemTemplate" Value="{StaticResource PipeDataItem}"></Setter>
<Setter Property="AllowDrop" Value="True"></Setter>
<EventSetter Event="Drop" Handler="ItemsControlDropTarget"></EventSetter>
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="ItemsControl_MouseLeftButtonDown"></EventSetter>
</Style>
**对于这个例子,我们可以选择2个The ItemsControls:**
<ItemsControl ItemsSource="{Binding Path=Pipes[23].Checkers}" Style="{StaticResource ItemsControlStyle}"/>
<ItemsControl Grid.Column="1" ItemsSource="{Binding Path=Pipes[22].Checkers}" Style="{StaticResource ItemsControlStyle}"/>
定期显示:
尽管将AllowDrop设置为True,但空(左)一个不被识别为放置目标 处理Drop事件(与此屏幕中的所有itemscontrols一样,查看上面的ItemsControl Style)
现在当我为itemscontrol面板上色时,它突然被识别出来了:
<ItemsPanelTemplate x:Key="TopPipePanelTemplate">
<StackPanel Background="AliceBlue"></StackPanel>
</ItemsPanelTemplate>
好像现在它占据了它所占据的整个细胞。 我试过将面板设置为VerticalAlignment =“Stretch”,但这也没有影响
我试图理解为什么我的itemcontrols不被识别为启用了drop, 即使我希望他们占用那个空间,另外这些项目用椭圆控制 只有在占据其内容的椭圆的高度才会被识别。
任何想法?
只是为了澄清我的意思被识别为放下目标是当你拖动椭圆时你能够 将它放在itemscontrol之上。
现在我只是将背景设置为透明
答案 0 :(得分:3)
面板的默认背景颜色不存在,这意味着命中测试会通过它。要让它注册命中测试,例如鼠标悬停事件,您需要为其指定背景颜色。通常我只使用White
,虽然你说Transparent
也有用,但也是更好的选择。
此外,StackPanels
通常只会占用他们需要的空间。您可能最好使用延伸填充所有可用空间的Panel,例如DockPanel
LastChildFill="False"
,并在您的商品上设置DockPanel.Dock="Top"