将功能区文本框上的IsEnabled设置为true,不执行任何操作

本文关键字:true 执行 操作 任何 设置 文本 功能区 IsEnabled | 更新日期: 2023-09-27 18:25:04

我正在开发一个程序,用本地UI和远程界面管理minecraft服务器。我在功能区栏上有一个按钮,可以启用或禁用远程界面,还有一个用于输入端口的文本框。目前,我在启用网络时禁用了文本框,但在我再次将其设置为true后,禁用不会重新启用文本框(设置断点会显示它仍然为false)。

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

感谢您帮助解决文本框无法再次启用的原因。

将功能区文本框上的IsEnabled设置为true,不执行任何操作

老问题,但我在搜索答案时一直遇到它,所以我想我无论如何都会发布答案。ribbonTextbox控件中存在一个错误,如果没有关联的命令,则会导致isenabled始终为false。根据我的发现,有两种方法可以解决这个问题:

1:基于ribbontbox创建一个新控件,并重写isenabledcore属性以始终返回true。如图所示,无法将RibbonTextBox isEnable设置为False

2:创建一个伪命令并将其与控制关联

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

如此链接中的注释所述http://blogs.msdn.com/b/wpf/archive/2010/10/21/wpf-ribbon-october-2010-update-details.aspx。正如我所说,可能对最初的海报没有帮助,但我在寻找答案时不断发现它,这样可以节省其他人几分钟的谷歌搜索时间。