Je scénario simple dans lequel je cache et montre une signle MenuItem
dans un ContextMenu
comme indiqué ci-dessous:WPF étrange question la visibilité MenuItem
Xaml:
<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Window.ContextMenu>
<ContextMenu Name="mainMnu">
<MenuItem Name="mnu" Header="Testing"/>
</ContextMenu>
</Window.ContextMenu>
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Button HorizontalAlignment="Left" Margin="52,131,0,108" Name="Button1"
Width="75">Button</Button>
</Grid>
</Window>
Code
derrière:
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
If mnu.Visibility = Windows.Visibility.Visible Then
mnu.Visibility = Windows.Visibility.Collapsed
mainMnu.Visibility = Windows.Visibility.Collapsed
Else
mnu.Visibility = Windows.Visibility.Visible
mainMnu.Visibility = Windows.Visibility.Visible
End If
End Sub
Le problème est que toutes les autres fois que j'appuie sur Button
le MenuItem
n'est pas montré. Clic droit affiche seulement un petit rectangle vide. (comme il y a un menu visible, mais pas un MenuItem
visible). Il fonctionne en quelque sorte dans un cycle ... 2 premiers clics: problème, 2 clics ok, et ainsi de suite ...
Des idées?
Cela fonctionne très bien pour mon exemple ... Mais je me demande encore s'il y a un moyen pour un ContextMenu pas tirer du tout si elle ne marche pas avoir des menuitems visibles ci-joints. – Entrodus
Puisque vous avez le contrôle sur vos menuitems via codebehind, pouvez-vous utiliser le paramètre de leur visibilité pour désactiver ou activer le menu contextuel? c'est-à-dire lorsque vous créez votre fenêtre, définissez-la sur null, et lorsque vous rendez visible un menuitem, définissez-le sur mainMnu? Le problème évident ici est que vous pouvez dynamiquement rendre les choses visibles ou invisibles, et donc vous devrez le suivre. Je cherchais à voir si le ContextMenu apparaît via un événement. J'espérais que vous pourriez gérer l'événement de tunnel en vérifiant la visibilité de menuitem enfant, puis mettre l'envent à Handled, mais est venu court. – Dave