我已覆盖我正在使用的某个第三方控件的控件模板:
所以
<Style TargetType="Some3rdPartyControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Some3rdPartyControl">
<Grid>
...alot of stuff..
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
基本上,我在控件模板中添加了一个按钮:
<Style TargetType="Some3rdPartyControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Some3rdPartyControl">
<Grid>
<Button x:Name="myButton" Width="20" Height="20">
...alot of stuff..
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
基本上,我想连接一个事件,错误可能是这个新按钮的命令......我该怎么做?它是哪种类型的命令,它会在哪里生活?我无法访问这个第三方控件的实际.cs类。所以我希望这个命令可以存在于我生成的文件中,这甚至可能吗?
答案 0 :(得分:0)
此命令来自模板化父级,即Some3rdPartyControl
...
您的Some3rdPartyControl
中是否包含Command
类型的depepdency属性?如果是,那么你可以TemplateBinding
。
<Button x:Name="myButton" Command="{TemplateBinding Command}" Width="20" Height="20">
否则,您必须为Some3rdPartyControl
创建一个Command类型附加属性,并将其用于TemplateBinding
到Button。
<Style TargetType="Some3rdPartyControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Some3rdPartyControl">
<Grid>
<Button x:Name="myButton" Width="20" Height="20" Command="{TemplateBinding myNamespace:MyAttachedBehavior.MyAttachedCommand}">
...alot of stuff..
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
现在,在实施Some3rdPartyControl
时,请执行此操作...
<Some3rdPartyControl myNamespace:MyAttachedBehavior.MyAttachedCommand="{Binding CommandFromDataContextViewModel}" />
CommandFromDataContextViewModel是您的自定义命令。由于TemplateBinding它到达Button,当Button单击happnes时,执行此CommandFromDataContextViewModel命令。
这会回答你的问题吗?
答案 1 :(得分:0)
你可以在ViewModel中拥有你的命令,只需使用RealtiveSource进行绑定就可以将该命令绑定到按钮 -
<Style TargetType="Some3rdPartyControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Some3rdPartyControl">
<Grid>
<Button x:Name="myButton" Width="20" Height="20"
Command="{Binding DataContext.YourCommandName, RelativeSource={RealtiveSource FindAncestor, AncestorType={x:Type UserControl}}}">
...alot of stuff..
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
答案 2 :(得分:0)
您想要UserControl的命令属性还是静态命令定义?
如果需要Command属性,例如Button.Command
属性,则需要在UserControl后面的代码中创建自己的命令定义。查找为此创建自己的自定义DependencyProperty
。执行的命令将“存活”在您的DataContext中,并且XAML代码看起来像这样:
<local:MyCustomControl SomeCustomCommand="{Binding SomeCommand}" />
如果它将是一个静态命令定义,如Copy
或Paste
命令,则需要在XAML可以访问的某处创建静态ICommand
,并将XAML绑定到像这样的东西:
<Button Command="{x:Static local:SomeCustomCommand}" />