Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF:命令已禁用_C#_.net_Wpf_Command - Fatal编程技术网

C# WPF:命令已禁用

C# WPF:命令已禁用,c#,.net,wpf,command,C#,.net,Wpf,Command,我有一个WPF用户控件,它包含一个带有5个按钮的工具栏。按钮的命令在父窗口中处理,但第五个按钮的命令由UC自己处理。不管我怎么做,按钮总是被禁用的。这是我的代码: 在用户控件中 <UserControl.CommandBindings> <CommandBinding Command="loc:MyAppCommands.OpenUrl" Executed="OpenUrl" /> </UserControl.CommandBindings> 有问题的按

我有一个WPF用户控件,它包含一个带有5个按钮的工具栏。按钮的命令在父窗口中处理,但第五个按钮的命令由UC自己处理。不管我怎么做,按钮总是被禁用的。这是我的代码:

在用户控件中

<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-好吧,如果我没记错的话,这是故意的行为。例如,有关焦点作用域如何工作的一些信息,请参见以下答案:。