我有一个listView,其中每个项目都包含一个包含Button的dataTemplate。这是因为要求单击列表项将像按钮单击一样,将您带到“向导”的下一步。
DataTemplate中的每个Button都包含一个ControlTemplate。
当命令的CanExecute为false时,此controlTemplate内的项目将被禁用。特别是在我下面的例子中,Button模板中的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>
答案 0 :(得分:0)
ButtonBase 挂钩与之关联的命令的 CanExecute 。当CanExecute返回false时,ButtonBase缓存该值并从其 IsEnabledCore 返回false,从而禁用ButtonBase。禁用元素时,将禁用其后代。如果您不希望它被禁用,那么您不应该将它与命令相关联(例如,挂钩单击)或不使用CanExecute将为false的命令(例如,使用从其返回true的其他包装器命令CanExecute但不调用包装命令的执行)或者不在按钮内放置其他元素(创建/使用一些在单击列表项时将执行命令的附加行为)。