WPF按钮会禁用自身,而无需进行绑定或编写代码

时间:2019-03-01 22:23:02

标签: c# wpf

我将在下面提供一些详细信息,但简短地讲,我有一个问题,如果单击应用程序中的其他位置,WPF应用程序中的按钮将自行禁用。该按钮链接到Command,但是按钮的IsEnabled属性绝对没有绑定,并且Command CanExecute回调仅将e.CanExecute设置为true。

我看到了类似的问题(Weird problem where Button does not get re-enabled unless the mouse is clicked),但没有帮助。

该应用程序很简单,由一个分为4个部分的DockPanel组成。左侧部分包含一个DataGrid,右侧部分包含一个UserControl,其中还包含几个DataGrids和令人讨厌的Button。太奇怪了,但是如果我单击左侧DataGrid中的任何行,则右侧部分中的Button将被禁用。然后,重新启用它的唯一方法是单击右侧部分中任一DataGrid中的任何行!

同样,该按钮的IsEnabled属性或隐含在适当位置的任何其他代码/标记绝对没有任何绑定。

一些相关的代码段:

UserControl命令绑定:

if label == man_black_shirt
   np.array([0,0,0,1]
else:
   np.array([0,0,0,0])

按钮xaml:

<UserControl.CommandBindings>
    <CommandBinding Command="cmd:DBScriptCommands.LoadScripts" CanExecute="cmdLoadScripts_CanExecute" Executed="cmdLoadScripts_Executed" />
    <CommandBinding Command="cmd:DBScriptCommands.RunScripts" CanExecute="cmdRunScripts_CanExecute" Executed="cmdRunScripts_Executed" />
</UserControl.CommandBindings>

可以执行命令:

<Button IsEnabled="True" x:Name="btnLoadScripts" Command="cmd:DBScriptCommands.LoadScripts">
    <StackPanel HorizontalAlignment="Stretch">
        <Image Source="/Images/folder-open.png" />
        <TextBlock>Load Scripts</TextBlock>
    </StackPanel>
</Button>

这让我感到困惑,任何想法都值得赞赏。如果需要更多信息,请告诉我。

编辑1: 似乎与Command有关(仍然不确定是什么)-如果我从Button中删除Command参数,问题就消失了-没有用,因为我希望按钮触发Command,但很有趣。在CanExecute()中,如果将e.CanExecute设置为false,则该按钮始终处于禁用状态,这很有意义。当它设置为true时(像现在这样),那么我遇到的问题是我有时描述的地方似乎有时会被魔术设置为false。

谢谢

0 个答案:

没有答案