Nella mia applicazione, ho un TreeView che consente il trascinamento/rilascio. Ho tutte le funzionalità che funzionano bene, tuttavia ho difficoltà a evidenziare un oggetto TreeView quando viene trascinato. Ecco il mio stile per il mio articolo treeview. Il trigger di IsMouseOver non funziona durante il trascinamento, poiché il trascinamento sembra bloccare altri eventi del mouse. Qualcuno può aiutarmi ad attivare le stesse modifiche al bordo sul mio elemento treeview durante il trascinamento?Evidenzia elemento TreeView trascinato su
<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>
Questa è una cosa bellissima, grazie mille! –
Questo è esattamente ciò di cui avevo bisogno oggi. Grazie mille Stefan! Nella mia vista ad albero ho notato che a volte non rimuoveva automaticamente l'evidenziazione dalla mia caduta, quindi ho registrato l'evento di rilascio e ho scritto una semplice funzione che imposta _dropPossible su false e Invalidates IsPossibleDropTargetProperty. Forse utile a qualcun altro? – chocojosh
Ottimo lavoro! Una cosa che ho aggiunto in aggiunta a ciò che #chocojosh ha aggiunto, sta dicendo all'oggetto TreeViewItem di espandersi se contiene elementi nell'evento OnDragEvent. È possibile farlo aggiungendo: if (_currentItem.HasItems) _currentItem.IsExpanded = true; – Brent