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>