En mi aplicación, tengo un TreeView que permite arrastrar/soltar. Tengo toda la funcionalidad funcionando bien, sin embargo, tengo dificultades para resaltar un TreeViewItem cuando se arrastra. Este es mi estilo para mi artículo treeview. El desencadenador IsMouseOver no funciona mientras se arrastra, porque el arrastre parece bloquear otros eventos del mouse. ¿Alguien puede ayudarme a activar los mismos cambios de borde en mi elemento treeview mientras arrastro?Resalte el elemento TreeView arrastrado sobre
<Style x:Key="TreeViewItemStyle" TargetType="{x:Type TreeViewItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TreeViewItem}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition MinWidth="19" Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<ToggleButton
x:Name="PART_Expander"
Style="{StaticResource ExpandCollapseToggleStyle}"
IsChecked="{Binding Path=IsExpanded, RelativeSource={RelativeSource TemplatedParent}}"
ClickMode="Press"
/>
<Border
x:Name="OuterBorder"
Grid.Column="1"
SnapsToDevicePixels="True"
BorderThickness="1"
CornerRadius="3"
BorderBrush="Transparent"
Background="Transparent"
>
<Border
x:Name="InnerBorder"
SnapsToDevicePixels="True"
BorderThickness="1"
CornerRadius="2"
BorderBrush="Transparent"
Background="Transparent"
>
<ContentPresenter
x:Name="PART_Content"
ContentSource="Header"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
/>
</Border>
</Border>
<ItemsPresenter
x:Name="PART_ItemsHost"
Grid.Row="1"
Grid.Column="1"
Grid.ColumnSpan="2"
/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" SourceName="OuterBorder" Value="True">
<Setter TargetName="OuterBorder" Property="BorderBrush" Value="Blue" />
<Setter TargetName="OuterBorder" Property="Background" Value="Red" />
<Setter TargetName="InnerBorder" Property="BorderBrush" Value="White" />
</Trigger>
<MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Eso es algo hermoso, ¡muchas gracias! –
Esto es exactamente lo que necesitaba hoy. Muchas gracias Stefan! En mi vista de árbol noté sin embargo que a veces no eliminaba automáticamente el resaltado de mi caída, así que registré el evento de caída y escribí una función simple que establece _dropPossible de nuevo en falso e Invalida IsPossibleDropTargetProperty. Tal vez sea útil para alguien más? – chocojosh
¡Buen trabajo! Una cosa que agregué además de lo que #chocojosh agregó, es decirle al TreeViewItem que se expanda si tiene elementos en el evento OnDragEvent. Puede hacer esto agregando: if (_currentItem.HasItems) _currentItem.IsExpanded = true; – Brent