我有一个ControlTemplate,我用它来改变几个按钮的外观和行为.我只希望Button的一部分可以单击并执行绑定的Command,所以我在ControlTemplate中添加了一个Button并将其绑定到模板的Command属性.
我遇到的问题是,因为我在模板化Button上定义了Command绑定,所以无论我点击哪个模板部分,它都会执行.
在下面的示例中,您可以单击边框并执行命令.如何更改它以便命令仅在单击模板中的按钮时执行?
<ControlTemplate x:Key="ButtonControlTemplate" TargetType="{x:Type Button}">
<Border BorderThickness="10" BorderBrush="Black">
<Button
Command="{TemplateBinding Command}"
CommandParameter="{TemplateBinding CommandParameter}" >
<ContentPresenter Content="{TemplateBinding Content}" />
</Button>
</Border>
</ControlTemplate>
...
<Button
Command="{Binding Path=SomeViewmodelCommand}"
CommandParameter="{Binding Path=SomeViewmodelCommandParameter}"
Content="Click"
Template="{StaticResource ButtonControlTemplate}" />
我不认为我可以模板化不同的元素(如Border),因为我仍然需要以某种方式传递Command,并且附加属性仍然会给我相同的行为.
最佳答案 这是一个肮脏的黑客,但您可以将内部按钮的Command属性绑定到模板化父级的Tag属性.这样你就可以从包含按钮“隐藏”命令,但是内部按钮秘密地知道如何到达它.
您可以保留CommandParameter,因为它本身没有任何影响.