C# 在LibraryBar上放置事件
我正在尝试将事件处理程序附加到Surface table v1.0、.NET 3.5上一些LibraryBars上的drop事件,以便将元素移动到各种ObservableCollection 我可以在所有相关的拖放事件(如PreviewDrop、DragEnter)上触发事件,但拖放事件本身(最重要的部分)除外。当我通过Snoop查看谁在处理事件时,它似乎被标记为由网格处理 XAML: 也许我已经盯着这个太久了,有一个简单的解决办法。MSDN说LibraryBars已经准备好处理拖放操作,所以我不明白为什么会出现这种情况。如何启动事件以便添加到列表中 谢谢你的帮助C# 在LibraryBar上放置事件,c#,event-handling,pixelsense,C#,Event Handling,Pixelsense,我正在尝试将事件处理程序附加到Surface table v1.0、.NET 3.5上一些LibraryBars上的drop事件,以便将元素移动到各种ObservableCollection 我可以在所有相关的拖放事件(如PreviewDrop、DragEnter)上触发事件,但拖放事件本身(最重要的部分)除外。当我通过Snoop查看谁在处理事件时,它似乎被标记为由网格处理 XAML: 也许我已经盯着这个太久了,有一个简单的解决办法。MSDN说LibraryBars已经准备好处理拖放操作,所以我
编辑:添加了更多信息-当OnDropCompleted附加到任何其他事件(如DragEnter事件)时,ObservableCollections会被添加到Drop事件中并从中删除,但我需要在Drop事件本身上使用它。是否有其他处理程序将事件设置为已处理?你是否设置了一个断点来确保这一点,或者只是看起来它没有被触发-玩家可能根本不在列表中吗?感谢@Markmnl的响应-我在Drop事件中设置了一个中断,它根本没有触发。
<Grid Background="{StaticResource WindowBackground}">
<s:LibraryBar
x:Name="startingBar"
HorizontalAlignment="Left"
VerticalAlignment="Top"
ItemsSource="{Binding Path=sourceList}"
ItemTemplate="{StaticResource LibraryBarTemp}"
AllowDrop="True">
</s:LibraryBar>
<s:LibraryBar
x:Name="destinationBar"
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
AllowDrop="True"
s:SurfaceDragDrop.PreviewDrop="OnPreviewDrop"
s:SurfaceDragDrop.Drop="OnDropCompleted"
ItemTemplate="{StaticResource LibraryBarTemp}"
ItemsSource="{Binding Path=testList}">
</s:LibraryBar>
</Grid>
public SurfaceWindow1()
{
InitializeComponent();
// Add handlers for Application activation events
AddActivationHandlers();
sourceList.Add(new Player("Jane"));
sourceList.Add(new Player("Joe"));
sourceList.Add(new Player("Jill"));
sourceList.Add(new Player("Julia"));
sourceList.Add(new Player("John"));
startingBar.ItemsSource = sourceList;
}
#region OnPreviewDrop
private void OnPreviewDrop(object sender, SurfaceDragDropEventArgs e)
{
if (startingBar.IsAncestorOf(e.Cursor.DragSource))
{
e.Effects = DragDropEffects.Move;
}
}
private void OnDropCompleted(object sender, SurfaceDragDropEventArgs e)
{
sourceList.Remove(e.Cursor.Data as Player);
testList.Add(e.Cursor.Data as Player);
}