按钮控制模板..保持模板项目启用时,命令.CanExecute为false



我有一个listView,其中每个项目由一个包含按钮的dataTemplate组成。这是由于一个需求,点击列表项将像点击按钮一样移动到"向导"的下一步。

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

当命令的CanExecute为false时,这个controlTemplate中的项将被禁用。特别是在我下面的例子中,按钮的模板里面的按钮(一个图像作为它的模板)也被禁用了。

如何在与该按钮关联的命令被禁用时保持模板内的项启用

Summary: 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>

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

相关内容

  • 没有找到相关文章

最新更新