![](/img/trans.png)
[英]Dragging behavior is not working for items in ItemsControl: MouseDragElementBehavior
[英]Using MouseDragElementBehavior with an ItemsControl and Canvas
我目前在使用ItemsControl和“自定義畫布”時使用Blend SDK中的MouseDragElementsBehavior遇到問題。 我的自定義畫布只是根據DependencyProperty從其子級中添加或刪除MouseDragElement。 當我手動向Canvas的子項添加Items時,此方法工作得很好,但移至ItemsControl時似乎已損壞。
我目前正在使用以下ItemsControl代碼:
<ItemsControl ItemsSource="{Binding Path=CanvasItems}">
<ItemsControl.DataContext>
<ViewModels:ViewModel/>
</ItemsControl.DataContext>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<my:CustomCanvas Background="Black" IsEditable="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.CanEdit}" AllowDrop="{Binding RelativeSource={RelativeSource Self}, Path=IsEditable}" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
在Canvas.VisualChildrenChanged方法中添加“拖動行為”不允許像以前一樣移動新創建的對象。
我是否需要將Drag行為添加到傳遞給VisualChildrenChanged的ContentPresenter之外的其他東西或提供特殊樣式?
我真的不知道混合sdk的行為,但是我已經研究了一般的行為,所以我希望能應用相同的機制。
如果要將行為添加到由ItemsControl創建的控件中,最好的方法是通過ItemsControl.ItemContainerStyle中的設置器添加行為,盡管在這種情況下,我發現將其添加到ItemsControl.ItemTemplate中更容易
就像是
<ItemsControl ItemsSource="{Binding CanvasItems}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas Background="Transparent" AllowDrop="True" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border BorderBrush="Green" BorderThickness="1" Background="AntiqueWhite">
<i:Interaction.Behaviors>
<ei:MouseDragElementBehavior ConstrainToParentBounds="True" DragBegun="MouseDragElementBehavior_DragBegun"/>
</i:Interaction.Behaviors>
<ContentControl Content="{Binding}" />
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<ItemsControl ItemsSource="{Binding CanvasItems}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="YourControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="YourControl">
<Border>
<Grid>
<SystemWindowsInteractivity:Interaction.Behaviors>
<MicrosoftExpressionInteractivityLayout:MouseDragElementBehavior />
</SystemWindowsInteractivity:Interaction.Behaviors>
<ContentPresenter />
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.