C# 在LibraryBar上放置事件

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已经准备好处理拖放操作,所以我

我正在尝试将事件处理程序附加到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);
    }