WPF Treeview HierarchicalDataTemplate Перетаскивание
У меня есть вид дерева в wpf, который построен с использованием xaml ниже. Это хорошо структурированный источник данных, и у меня много проблем с перетаскиванием. Я пробовал несколько методов, но все безрезультатно. Может кто-нибудь сказать мне, что стандартная процедура для этого типа вещей?
<TreeView x:Name="_treeView" ItemsSource="{Binding}" Grid.Row="0" Grid.Column="0">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type Logic:Statement}"
ItemsSource="{Binding Path=PagedChildren}">
<TextBlock Text="{Binding StatementName}"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type Logic:StatementPage}"
ItemsSource="{Binding Path=Children}">
<WrapPanel>
<TextBlock Text="Page: "/>
<TextBlock Text="{Binding PageIndex}"/>
</WrapPanel>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type Logic:StatementFund}">
<Border HorizontalAlignment="Left" VerticalAlignment="Top" BorderBrush="Black" BorderThickness="2" CornerRadius="25">
<WrapPanel Margin="30 0 30 0" Width="150" Height="150" >
<StackPanel>
<TextBlock Text="Fund"/>
<WrapPanel>
<TextBlock Text="Fund: "/>
<TextBlock Text="{Binding FundNumber}"/>
</WrapPanel>
<WrapPanel Margin="10 0 0 0">
<TextBlock Text="{Binding ColumnIndex}"/>
</WrapPanel>
</StackPanel>
</WrapPanel>
</Border>
</DataTemplate>
<DataTemplate DataType="{x:Type Logic:StatementPreviousCycle}">
<Border HorizontalAlignment="Left" VerticalAlignment="Top" BorderBrush="Black" BorderThickness="2" CornerRadius="25">
<WrapPanel Margin="30 0 30 0" Width="150" Height="150" >
<StackPanel>
<TextBlock Text="Previous Cycle"/>
<WrapPanel>
<TextBlock Text="Fund: "/>
<TextBlock Text="{Binding FundNumber}"/>
</WrapPanel>
<WrapPanel Margin="10 0 0 0">
<TextBlock Text="{Binding ColumnIndex}"/>
</WrapPanel>
</StackPanel>
</WrapPanel>
</Border>
</DataTemplate>
</TreeView.Resources>
</TreeView>
1 ответ
Я использую методы на этом сайте для общего перетаскивания.
древовидное представление может стать грязным, если вы хотите знать, на каком узле вы preivewMouseDown ', чтобы затем использовать его в качестве элемента перетаскивания, вы можете в конечном итоге пройти по визуальному дереву. здесь есть код для этого. Другой способ заключается в создании подкласса древовидного представления и древовидного элемента, затем вы можете переопределить мышь предварительного просмотра вниз для каждого элемента древовидного представления и сообщить об этом своему производному родительскому древовидному представлению, что может сделать элемент древовидного представления выбранным элементом.