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

4
我有一个ControlTemplate,用于改变多个Button的外观和行为。我只想让部分Button可点击并执行绑定的Command,因此我在ControlTemplate中添加了一个Button,并将其绑定到模板的Command属性��
我的问题是,由于我正在定义模板化的Button上的Command绑定,因此无论我点击模板的哪个部分,它都会执行。
在下面的示例中,您可以单击Border并执行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,并且附加属性仍会给我相同的行为。

2个回答

1

这是一种不太正规的方法,但你可以将内部按钮的Command属性绑定到模板父级的Tag属性上。这样你就可以“隐藏”包含按钮的命令,但内部按钮秘密地知道如何访问它。

你可以保留CommandParameter不变,因为它本身没有任何影响。


1

另一种选择是重新制定另一个控件的模板,例如Border,并在模板内使用RoutedCommand对内部的Button进行操作。您可以将其绑定到其中一个内置的RoutedCommands,例如ApplicationCommands.Save,在包含控件的XAML中添加该特定命令的CommandBinding即可。如果需要代码示例,请告诉我。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接