Ho creato un menu contestuale personalizzato in cui ho cambiato l'aspetto di tutti gli elementi. Questi articoli contengono controlli diversi come caselle combinate e pulsanti. Ora voglio che il menu si chiuda se è stato premuto un pulsante o se è stato selezionato un oggetto combobox. Attualmente il menu rimane aperto. Puoi darmi un suggerimento?Chiusura Menu Contesto con Menu Menu Templati
Si tratta di un codice semplificato per mostrare quello che ho fatto:
<ContextMenu StaysOpen="False">
<MenuItem>
<MenuItem.Template>
<ControlTemplate>
<Grid MinWidth="200">
<Button Command="{Binding SomeWorkingCommandBinding}">OK</Button>
</Grid>
</ControlTemplate>
</MenuItem.Template>
</MenuItem>
</ContextMenu>
Come accennato, vorrei chiudere il menu quando ho colpito quel pulsante OK.
UPDATE
Il seguente pulsante (o qualsiasi altro controllo) fa il trucco, senza la necessità di Miscela SDK:
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(ContextMenu.IsOpen)" Storyboard.Target="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ContextMenu}}">
<DiscreteObjectKeyFrame KeyTime="0:0:0">
<DiscreteObjectKeyFrame.Value>
<sys:Boolean>False</sys:Boolean>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
Mi piace l'idea, ma il campione non funziona in quanto la TargetObject non può essere un ElementName di fuori del ControlTemplate, così ho usato un RelativeSource per questo. Tuttavia ho aggiunto una soluzione senza Blend al mio post iniziale. – Jaster
Corretto - Risposta aggiornata con RelativeSource (per riferimenti futuri ...) – Blachshma