在WPF中覆盖模板化按钮的命令

我有一个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,因为它本身没有任何影响.

点赞