C# WPF:命令已禁用
我有一个WPF用户控件,它包含一个带有5个按钮的工具栏。按钮的命令在父窗口中处理,但第五个按钮的命令由UC自己处理。不管我怎么做,按钮总是被禁用的。这是我的代码: 在用户控件中C# WPF:命令已禁用,c#,.net,wpf,command,C#,.net,Wpf,Command,我有一个WPF用户控件,它包含一个带有5个按钮的工具栏。按钮的命令在父窗口中处理,但第五个按钮的命令由UC自己处理。不管我怎么做,按钮总是被禁用的。这是我的代码: 在用户控件中 <UserControl.CommandBindings> <CommandBinding Command="loc:MyAppCommands.OpenUrl" Executed="OpenUrl" /> </UserControl.CommandBindings> 有问题的按
<UserControl.CommandBindings>
<CommandBinding Command="loc:MyAppCommands.OpenUrl" Executed="OpenUrl" />
</UserControl.CommandBindings>
有问题的按钮
<l49ui:ImageButton Command="loc:MyAppCommands.OpenUrl" CommandParameter="{Binding}" Text="{lex:LocText MyApp.Core:Strings:OpenUrl}" ShowText="False" ToolTip="{lex:LocText MyApp.Core:Strings:OpenUrl}" Style="{StaticResource ToolBarButton}"
Image="{Binding Url,Converter={StaticResource UrlNotNullConverter},ConverterParameter=image}" IsEnabled="true" />
基于列表选择设置用户控件的datacoontext;因此,我将窗口->用户控件绑定到列表框->选项卡控件->工具栏按钮
图像会根据commandparameter(本例中为Url)是否为空进行更改,这会起作用。但是,该按钮始终处于禁用状态。唯一使其启用的是切换到ParentTab控件中的另一个选项卡,然后使用按钮返回到tab
我已尝试调用CommandManager.InvalidateRequestSuggested();当datacontext更改并为命令添加“CanAlwaysExecute”处理程序时,但在调用CommandManager.InvalidateRequestSuggested()时,CanExecute处理程序未执行 焦点范围可能有问题。尝试在按钮上显式指定属性。将其设置为用户控件内的元素,在该元素上应引发
Execute
和CanExecute
事件(可能是用户控件内的根元素)。这可能是焦点范围的问题。尝试在按钮上显式指定属性。将其设置为用户控件内的元素,在该元素上应引发Execute
和CanExecute
事件(可能是用户控件内的根元素)。是否可能在父控件中处理此命令的CanExecute事件?如果事件在树上冒泡,则可能在另一个位置使用“false”返回值处理该事件,因此按钮被禁用。我将尝试在UserControl中处理CanExecute事件,并在那里设置一个断点以进一步调查。您是否在父控件中处理此命令的CanExecute事件?如果事件在树上冒泡,则可能在另一个位置使用“false”返回值处理该事件,因此按钮被禁用。我会尝试在UserControl中处理CanExecute事件,并在那里设置一个断点以进一步调查。谢谢,对我来说,命令一直是一个模糊的理解领域。这是预期行为还是错误?我开始怀疑WPF是否真的值得;它可以做很多复杂的事情,但几乎所有过去简单的或只是在WinForms中工作的东西,都在WPF中被牺牲了,以使这些复杂的事情正常工作。@romkyns-好吧,如果我没记错的话,这是故意的行为。例如,有关焦点作用域如何工作的一些信息,请参见以下答案:。谢谢,对我来说,命令一直是一个模糊的理解领域。这是预期行为还是错误?我开始怀疑WPF是否真的值得;它可以做很多复杂的事情,但几乎所有过去简单的或只是在WinForms中工作的东西,都在WPF中被牺牲了,以使这些复杂的事情正常工作。@romkyns-好吧,如果我没记错的话,这是故意的行为。例如,有关焦点作用域如何工作的一些信息,请参见以下答案:。