Frage

Ich arbeite an einem Programm, um einen Minecraft -Server mit einer lokalen Benutzeroberfläche sowie einer Remote -Schnittstelle zu verwalten. Ich habe eine Schaltfläche auf einer Bandleiste, die die Remote -Schnittstelle und ein Textfeld für die Eingabe des Ports aktiviert oder deaktiviert. Derzeit deaktiviere ich das Textfeld, wenn das Netzwerk aktiviert ist, aber das Deaktivieren kann das Textfeld nicht wieder aufnehmen, nachdem ich es erneut auf True gesetzt habe (und das Einstellen eines Haltepunkts zeigt, dass es immer noch falsch ist).

    private void NetToggleChecked(object sender, RoutedEventArgs e) {
        portTextBox.IsEnabled = false;
        if (ButtonPressedByUser) {
            var result = MessageBox.Show("Are you sure you want to enable networking with the current settings?" +
                                         " If not properly configured, it may be possible for an attacker to enter your server.",
                                         "Simple Bukkit Wrapper", MessageBoxButton.YesNo, MessageBoxImage.Warning,
                                         MessageBoxResult.No);
            if (result == MessageBoxResult.No) {
                ButtonPressedByUser = false;
                NetworkToggle.IsChecked = false;
                ButtonPressedByUser = true;
                return;
            }
        }

        Config.NetConf["enabled"] = "true";

        int port;
        if (!int.TryParse(Config.NetConf["port"], out port)) {
            MessageBox.Show("Port could not be parsed (is it a number?)");
            ButtonPressedByUser = false;
            NetworkToggle.IsChecked = false;
            ButtonPressedByUser = true;
            return;
        }

        Net.Listener.StartListening(port);
    }

    private void NetworkToggleUnchecked(object sender, RoutedEventArgs e) {
        portTextBox.IsEnabled = true;
        if (ButtonPressedByUser) {
            var result =
                MessageBox.Show("Are you sure you wish to disable all networking to your server? It will " +
                                "be impossible to connect to it remotely and any existing connections will be closed.",
                                "", MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No);
            if (result == MessageBoxResult.No) {
                ButtonPressedByUser = false;
                NetworkToggle.IsChecked = true;
                ButtonPressedByUser = true;
                return;
            }
        }

        Config.NetConf["enabled"] = "false";
        Net.Listener.StopListening();
    }

Vielen Dank für die Hilfe bei der Auflösung, warum das Textfeld nicht erneut aktiviert wird.

War es hilfreich?

Lösung

Alte Frage, aber ich bin immer wieder darauf gestoßen, als ich nach einer Antwort suchte, so dachte ich, ich würde trotzdem eine Antwort veröffentlichen. Es gibt einen Fehler im RibbontextBox -Steuerelement, der dazu führt, dass iSenabled immer falsch ist, wenn kein Befehl zugeordnet ist. Es gibt 2 Wege um das, was ich gefunden habe:

1: Erstellen Sie ein neues Steuerelement basierend auf der RibbontextBox und überschreiben Sie die IssenableDCore -Eigenschaft, um immer true zurückzugeben. Wie hier gezeigt Ribbontextbox kann nicht auf false festgelegt werden

2: Erstellen Sie einen Dummy -Befehl und verknüpfen Sie ihn mit der Steuerung zusammen

public static readonly ICommand DummyCommand = new RoutedCommand("Dummy", typeof(Control));
    public static void Dummy(Object sender, ExecutedRoutedEventArgs e)
    {
        // Do nothing its a dummy command
    }
    public static void CanDummy(object sender, CanExecuteRoutedEventArgs e)
    {
        e.CanExecute = true;
    } 

Wie in einem Kommentar in diesem Link beschrieben http://blogs.msdn.com/b/wpf/archive/2010/10/21/wpf-ribbon-october-2010-update-details.aspx . Wie gesagt, wahrscheinlich keine Hilfe für das ursprüngliche Poster, aber ich kam immer wieder darauf, während ich nach einer Antwort suchte, sodass es jemand anderem ein paar Minuten googeln kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top