0

我有一个 listView,其中每个项目都包含一个包含 Button 的 dataTemplate。这是由于要求单击列表项将像单击按钮一样使您进入“向导”的下一步。

DataTemplate 中的每个 Button 都包含一个 ControlTemplate。

当命令的 CanExecute 为 false 时,此 controlTemplate 中的项目将被禁用。特别是在我下面的示例中,Button 模板内的 Button(以图像为模板的那个)也被禁用。

即使禁用了与该按钮关联的命令,如何保持模板内的项目处于启用状态。

摘要:按钮的模板包含另一个按钮。当父按钮的命令被禁用时,模板内的按钮被禁用。

XAML:

<ListView.ItemTemplate>
    <DataTemplate>                
        <Button Name="nextButton" Height="30" Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Wiz:edited}}, Path=DataContext.ACommand}" CommandParameter="{Binding}">
              <Button.Template>
                <ControlTemplate>                     
                   <StackPanel Orientation="Horizontal">
                      <Label Content="{Binding}"/>
                      <Button>
                         <Button.Template>
                            <ControlTemplate>
                                <Image Source="{Binding source}"/>
                            </ControlTemplate>
                         </Button.Template>
                      </Button>
                   </StackPanel>
                </ControlTemplate>                    
              </Button.Template>
            </Button>
    </DataTemplate>
</ListView.ItemTemplate>
4

1 回答 1

0

ButtonBase挂钩与其关联的Command的CanExecute。当 CanExecute 返回 false 时,ButtonBase 缓存它并从其IsEnabledCore返回 false,从而禁用 ButtonBase。当一个元素被禁用时,它的后代也被禁用。如果您不希望它被禁用,那么您不应该将它与命令相关联(例如挂钩单击)或不使用 CanExecute 将为假的命令(例如使用从CanExecute 但不调用包装命令的执行)或不将其他元素放在按钮内(创建/使用一些附加行为,当单击列表项时将执行命令)。

于 2013-01-15T21:19:53.063 回答