Ich versuche, ein etwas komplexes Menüelement zu erstellen, mit dem ein Benutzer eine neue Klasse erstellen kann. Das Problem, in dem ich ausgeführt werde, ist, dass, wenn ich auf ein numerisches up-down (aus dem xceed toolkit) klicke, der Menüeintrag schließt, selbst wenn die Eigenschaft StaysOpenOnClick
auf true gesetzt ist.Wie kann ich einen Menüunterpunkt offen halten?
Benutzer werden das nicht mögen.
zu reproduzieren, ein WPF-Projekt erstellen und die Extended WPF Toolkit durch NuGet hinzufügen, löschen Sie dann den folgenden Code in Ihre Hauptfenster Klasse:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WhyDoesMyMenuItemCloseWhenClicked"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
mc:Ignorable="d"
x:Class="WhyDoesMyMenuItemCloseWhenClicked.MainWindow"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="21"/>
<RowDefinition />
</Grid.RowDefinitions>
<Menu FontWeight="Bold">
<MenuItem Header="_File">
<MenuItem StaysOpenOnClick="True">
<Grid Height="50" Width="50">
<xctk:IntegerUpDown/>
</Grid>
</MenuItem>
</MenuItem>
</Menu>
</Grid>
</Window>
Wenn ich das Textfeld der Integer-up-down klicken, Das Menü wird geschlossen.
Warum passiert das immer? Wie kann ich es machen NICHT passieren?
zu erreichen Wenn Sie das Textfeld eingeben, gibt als nur ein Klick mehr los wird. Ein anderes Element als das Menü erhält volle Tastaturbelegung/Fokus, was wahrscheinlich eine völlig andere Kette von Ereignissen auslöst. Sie könnten versuchen, Änderungen an IsSubMenuOpen abzufangen und sie abzubrechen oder umzukehren, aber meine Versuche führten zu einem inakzeptablen Verhalten. Obwohl es in der Tat blieb offen. – Daniel
Noch etwas, Sie könnten versuchen, die Vorlage des MenuItems zu einer Ressource zu extrahieren und diese (im Popup) durch eine Variable zu ersetzen: IsOpen = "{Binding IsSubmenuOpen, RelativeSource = {RelativeSource TemplatedParent}}" – Daniel
Ja, sogar den gesamten Baum zu erzwingen Wenn Menüs weiterhin offen bleiben, führt dies zu einem inakzeptablen Verhalten. Ein Teil des Menüs entfernt den Fokus stark vom Textfeld. Das ist ein bisschen mehr, als ich an einem Sonntag untersuchen möchte, aber ich wünsche Ihnen viel Glück. Ich hoffe, das obige hat dir irgendwie geholfen. – Daniel