2012-02-18 4 views
2

ローカルインターフェイスとリモートインターフェイスを持つMinecraftサーバーを管理するプログラムを作成しています。リボンバーには、リモートインターフェイスを有効または無効にするボタンと、ポートを入力するためのテキストボックスがあります。現在、ネットワーキングが有効になっているときにテキストボックスを無効にしますが、無効にすると、テキストボックスを再びtrueに設定した後で再度有効になりません(また、ブレークポイントを設定するとfalseになることが明らかになります)。リボンのテキストボックスにあるIsEnabledを何もしないでtrueに設定する

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(); 
    } 

テキストボックスが再度有効にならない理由を解決していただきありがとうございます。

答えて

7

古い質問ですが、回答を探しているうちに私はそれを見つけ続けていましたので、とにかく答えを投稿すると思いました。リボンテキストボックスコントロールにバグがあり、コマンドが関連付けられていないと、isenabledは常にfalseになります。私が見つけたものから2つの方法があります:

リボンテキストボックスに基づいて新しいコントロールを作成し、isenabledcoreプロパティをオーバーライドして常にtrueを返します。ここCannot set RibbonTextBox isEnable to False

2示すように、ダミーコマンドを作成し、このリンクhttp://blogs.msdn.com/b/wpf/archive/2010/10/21/wpf-ribbon-october-2010-update-details.aspxにコメントで説明したように制御

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; 
    } 

に関連付けます。 私はおそらく元のポスターに何の助けもなかったと言いましたが、回答を探している間、私はそれを渡って来て、グーグルで数分間他の人を救うかもしれません。

関連する問題