TreeViewDragDropTarget не работает - PullRequest
1 голос
/ 04 июля 2011

Silverlight, инструментарий

Я использую TreeViewDragDropTarget. Обычно, когда вы перетаскиваете элемент и перемещаете его над другим элементом, стрелка вверх и вниз выбранного элемента меняется на стрелку вправо.

В моем случае это не изменится, а перетаскивание не работает.

TreeView:

<controlsToolkit:TreeViewDragDropTarget Grid.Row="2" AllowDrop="True" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" >
    <controlsToolkit:TreeViewDragDropTarget.Resources>
        <Data:HierarchicalDataTemplate x:Key="FilterableTreeViewTemplate" ItemsSource="{Binding Children}">
            <StackPanel Orientation="Horizontal" Height="Auto" Width="Auto">
                <Image Source="{Binding NodeType,Converter={StaticResource TreeIconConverter}}" />
                <TextBlock x:Name="NameTextBlock" Text="{Binding Name}" />
            </StackPanel>
        </Data:HierarchicalDataTemplate>
    </controlsToolkit:TreeViewDragDropTarget.Resources>
    <Controls:TreeView Name="treeView" ItemTemplate="{StaticResource FilterableTreeViewTemplate}" ItemsSource="{Binding ElementName=MyFilterableTreeViewControl, Path=ItemsSource}" SelectedItemChanged="treeView_SelectedItemChanged"/>
</controlsToolkit:TreeViewDragDropTarget>

ItemsSource:

public ObservableCollection<IFilterableTreeViewItem> ItemsSource 
{
    get { return ( ObservableCollection<IFilterableTreeViewItem> )GetValue( ItemsSourceProperty ); }
    set { SetValue( ItemsSourceProperty, value ); }
}

public static readonly DependencyProperty ItemsSourceProperty =
    DependencyProperty.Register( "ItemsSource", typeof( ObservableCollection<IFilterableTreeViewItem> ), typeof( FilterableTreeViewControl ),
    new PropertyMetadata( null, new PropertyChangedCallback( FilterableTreeViewControl.OnItemsSourcePropertyChange ) ) );

private static void OnItemsSourcePropertyChange( DependencyObject d, DependencyPropertyChangedEventArgs e ) 
{
    FilterableTreeViewControl ctrl = d as FilterableTreeViewControl;
            ctrl.OnItemsSourceChange( ( ObservableCollection<IFilterableTreeViewItem> )e.NewValue );
}

protected virtual void OnItemsSourceChange( ObservableCollection<IFilterableTreeViewItem> NewItemsSource ) 
{
    UpdateTreeViewItemsSource( NewItemsSource );
}

Есть идеи?


Если я удаляю ItemTemplate, то «работает».


Я обнаружил, что при перетаскивании я не вижу вспомогательных линий в Silverlight

Но в моем случае эти два типа одинаковы: ObservableCollection<IFilterableTreeViewItem>

1 Ответ

0 голосов
/ 06 июля 2011

Это было решение: http://www.codeproject.com/KB/silverlight/HierarchicalDataTemplate.aspx

Мне нужен был еще один уровень абстракции TreeNode.

...