gpt4 book ai didi

c# - 无法在 C# WPF 中设置 button.IsEnabled=true

转载 作者:行者123 更新时间:2023-11-30 17:18:14 35 4
gpt4 key购买 nike

这个问题听起来很简单。假设 button.IsEnabled == false,当我执行 button.IsEnabled = true;按钮仍然是错误的! (通过使用 Visual Studio 的“监视”功能在调试器中设置后立即查看值)

显然,这并不常见,因为该代码通常可以正常工作。但显然系统中有某些东西阻止了设置,我正在寻找关于它可能是什么的想法。起初我以为是因为按钮被挂接到 ICommand 中,它显然控制着 IsEnabled 设置本身。所以我删除了 ICommand。这适用于不同的按钮,但此按钮未通过“Command={Binding Path...}”连接到 ICommand。事实上,这个按钮是在 C# 中简单创建的:

Button button = new Button();
button.Content = "Save Record";
button.IsTabStop = false;

这些按钮存在于自定义控件工具栏中,试图设置它们的值的代码出现在我编写的 PropertyChanged 事件处理程序中。奇怪的是,相同的代码最初成功地将按钮设置为 false 并且有效!什么可能禁止设置 IsEnabled=true?

几个小时后:

呸,菜鸟犯的错误(在 IT 行业工作 35 年后)。在代码的下方是一行:

button.Command = new myCommand(...); 

所以,事实上,按钮是通过命令界面连接的。我把它拿出来并用按钮单击事件处理程序替换它,问题就解决了。由于我无法在 Google 中找到这个问题,经过多次搜索后,让我重述一下这个问题以防其他人遇到它:当您将 ICommand 连接到 UIElement 时,例如按钮、菜单项等。.Net 接管了 IsEnabled 属性。您不能再以编程方式设置该属性。

最佳答案

我知道你回答了这个问题,但看起来你只是撕掉了新式代码并回到了旧的方式。因此,如果您想了解新方法的工作原理,请继续阅读。

命令是事件系统的改进!命令替换了 IsEnabled 属性和 Click 事件,并允许您定义有用的命令快捷方式。

一旦将某些东西连接到命令,您就不应再为该东西使用 IsEnabled 或 Click。

相当于“IsEnabled = True”的命令是从命令的 CanExecute 事件处理程序返回 True。

然后,为 Command 定义一个 Executed 处理程序,这将替换 Click 事件。

为什么这么好?简单:您可以将工具栏按钮、菜单项、上下文菜单项以及可能的其他一些界面部分连接到命令,并且您不必跟踪(或定义)这些元素的每个属性或事件。想想一个文本编辑器应用程序。传统的方法是将一个事件连接到“编辑”>“复制”、“复制”工具栏按钮和一个上下文菜单项;处理 TextBox 的 SelectionChanged 事件以根据需要启用/禁用所有这些;并为每个代码编写 Click 事件。新方法是:将命令连接到“编辑”>“复制”、“复制”工具栏按钮和上下文菜单项,定义 CanExecute 事件以根据 TextBox 的选择属性返回 true/false,并对 Executed 处理程序进行编码。看起来相似?是的,但是您在标记而不是代码中声明命令连接,并且您几乎不必编写那么多代码。当您有很多命令时,它加起来可以节省很多。

关于c# - 无法在 C# WPF 中设置 button.IsEnabled=true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5899210/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com