Domanda

Ho una configurazione TreeView in modo che ogni TreeViewItem ha tasto destro del mouse menu contestuale applicato come Style. Qualcosa di simile:

<Grid.Resources>
    <ContextMenu x:Key="contextMenu">
         <MenuItem Header="Save"  IsEnabled="{Binding Path=Saveable}"/>
         <MenuItem Header="Copy" IsEnabled="{Binding Path=Copyable}"/>
         <MenuItem Header="Remove" IsEnabled="{Binding Path=Removeable}"/>
    </ContextMenu>
    <Style TargetType="TreeViewItem">
        <Setter Property="ContextMenu" Value="{StaticResource contextMenu}" />
    </Style>
</Grid.Resources>

salvabile, copiabile e rimovibile sono le proprietà che provengono da l'oggetto che viene utilizzato come MenuItem.

Quello che sto cercando è quando l'utente fa clic su un object.Save(), sarebbe cliccare sul metodo appropriato dell'oggetto selezionato. Quindi, cliccando sul pulsante "Salva" object.Copy() chiamerebbe <=>, "Copia" chiamate <=>, ecc, ma non sono sicuro che cosa la sintassi sarà simile, o se l'idea è in realtà accettabile in termini di tipico stile WPF. So che posso solo creare un nuovo gestore di eventi nella finestra che comprende, ma io preferisco l'elemento selezionato in sé per gestire l'evento.

Pensieri?

Grazie!

È stato utile?

Soluzione

Purtroppo, non credo che ci sia un modo automatico per farlo. L'opzione più vicina potrebbe essere quella di impostare un RoutedUICommand per ogni elemento della ContextMenu, e quindi creare un CommandBinding per ciascuna nella tua classe. Se si desidera quelli per andare al TreeViewItem, avrete probabilmente bisogno di sottoclasse CommandBindings e impostare il EventSetter lì.

L'unica opzione che ho pensato che potrebbe funzionare potrebbe essere quella di aggiungere un MenuItem.Click per TreeViewItems al <=> stile. Tuttavia, ciò non ha funzionato -. Probabilmente perché gli elementi della <=> si trovano in una struttura ad albero visuale diverso dal <=>

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top