У меня есть кнопка с ContextMenu
, установленным следующим образом:
<Button
x:Name="TestButton"
Click="TestButton_Click">
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="Sample Menu Item 1" />
<MenuItem Header="Sample Menu Item 2" />
<MenuItem Header="Sample Menu Item 3" />
</ContextMenu>
</Button.ContextMenu>
</Button>
Код позади:
private void TestButton_Click(object sender, RoutedEventArgs e)
{
// This always prints false, even though the contextmenu is currently opened
System.Console.WriteLine(button.ContextMenu.IsOpen);
if (sender is Button button)
{
button.ContextMenu.Placement = PlacementMode.Bottom;
button.ContextMenu.PlacementTarget = button;
button.ContextMenu.StaysOpen = true;
button.ContextMenu.IsOpen = !button.ContextMenu.IsOpen; // Doesn't work!
}
}
Так что я установил ContextMenu
для открытия на одномщелчок мыши, и это работает, однако я хотел бы переключать ContextMenu
видимость при каждом нажатии кнопки.Для этого я хочу использовать свойство IsOpen
- установите его в false, если текущее значение равно true, и наоборот.
Моя проблема в том, что, хотя значение свойства IsOpen
установлено от false
до true
при первом щелчке, оно всегда остается false
при втором щелчке, как никогда не будет установлено.
Я предполагаю, что речь идет о потере фокуса (поправьте меня, если я ошибаюсь) - так как я могу обойти это и оставить его помеченным как открытый, пока не произойдет еще один щелчок?