È possibile utilizzare lo AttachedCommandBehavior classes from C# Disciples per ottenere ciò.
Definire un comando in ViewModel, quindi sull'oggetto Grid utilizzare ACB AllegateProperties per associare l'evento MouseLeftButtonUp
al comando.
Alcuni codice per iniziare:
<Grid Name="grid" Height="30" ForceCursor="True" Cursor="Hand">
<acb:CommandBehaviorCollection.Behaviors>
<acb:BehaviorBinding Event="MouseLeftButtonUp" Command="{Binding Path=DataContext.EditEventCommand, RelativeSource={RelativeSource AncestorType={x:Type self:Dashboard}}}" CommandParameter="{Binding}" />
</acb:CommandBehaviorCollection.Behaviors>
</Grid>
Modifica per soluzione non MVVM.
Il frammento di codice sopra riportato funzionerà ancora quando non hai progettato la tua applicazione seguendo le linee guida MVVM poiché in pratica stai semplicemente vincolando ad un comando nel code-behind.
Tuttavia, se non si vuole andare alla difficoltà di definire comandi, è possibile specificare semplicemente un evento per agganciare a, in questo modo:
<Grid MouseLeftButtonUp="Grid_MouseLeftButtonUp">
nel file XAML.
e nel code-behind:
private void Grid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
}
cosa causa esattamente questo problema? sto cercando di capire perché questo succede. Un clic su un elemento non dovrebbe comportare un evento del mouse di anteprima che scava l'albero verso il treeviewitem? o treeviewitem non è il focus dell'evento del mouse? Ho pensato che gli eventi del mouse sono stati generati in base al test di successo che avrebbe ottenuto l'elemento più interno nell'albero visivo (che presumo sarebbe il treeviewitem) e poi renderò il bersaglio dell'evento –