我有一个继承自Panel的控件。此控件基于绑定到自定义控件的集合创建按钮控件。如何处理来自孩子们的button.click事件?这是我的XAML。该命令无法执行。
<ScrollViewer HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="Auto" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<control:TreeContainer HorizontalAlignment="Center"
Width="Auto" Height="Auto" Margin="8,8,8,8" VerticalBuffer="20"
RootNode="{Binding Path=RootNode}"
ChildrenNodes="{Binding Path=ChildrenNodes}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Button.Click">
<cmd:EventToCommand Command="{Binding Path=TreeContainerClickCommand, Mode=OneWay}" PassEventArgsToCommand="True" />
</i:EventTrigger>
</i:Interaction.Triggers>
</control:TreeContainer>
</ScrollViewer>
答案 0 :(得分:0)
您可以将样式设置为控件中的所有按钮,并将命令绑定到那里。
将带有TargetType="Button"
的样式添加到TreeContainer时,它将应用于TreeContainer中的所有按钮。
<ScrollViewer HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="Auto" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<control:TreeContainer HorizontalAlignment="Center"
Width="Auto" Height="Auto" Margin="8,8,8,8" VerticalBuffer="20"
RootNode="{Binding Path=RootNode}"
ChildrenNodes="{Binding Path=ChildrenNodes}">
<control:TreeContainer.Resources>
<Style TargetType="Button">
<Setter Property="Command" Value="{Binding Path=TreeContainerClickCommand, Mode=OneWay}"/>
</Style>
</control:TreeContainer.Resources>
</control:TreeContainer>
如果您无法访问按钮中的TreeContainer ViewModel,则必须通过RelativeSource访问它:
<Setter Property="Command"
Value="{Binding Mode=OneWay,
Path=DataContext.TreeContainerClickCommand,
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type control:TreeContainer}}}" />
请注意,您必须将路径更改为DataContext.*
,因为您的来源为TreeContainer
,而不是其ViewModel。
编辑:
如果你确实需要一个EventTrigger
来获取你的EventArgs
,你可以像上面的按钮模板那样做。然后,您可以定义一个新模板,您可以在其中使用交互触发器。