我正在使用带有自定义controltemplate的按钮。
我的按钮包含几个子元素,如图像。
<ControlTemplate x:Key="myKey" TargetType="Button">
...
<StackPanel Orientation="Horizontal" DockPanel.Dock="Bottom" HorizontalAlignment="Right">
<Image x:Name="img1" />
...
<Image x:Name="img2" />
我已将一个Click-Handler应用于使用上述模板的按钮。
现在我想知道,按钮的可视树中的哪个元素被完全点击了。例如img1,img2,......
我可以使用click事件的路由事件参数来区分原始元素吗?
谢谢
勒
答案 0 :(得分:1)
这可以通过使用PreviewMouseDown
事件(而不是Click
事件)来实现,例如
<Button Template="{StaticResource myKey}"
PreviewMouseDown="Button_PreviewMouseDown"
Click="Button_Click"/>
您可以使用事件参数的OriginalSource
来获取图像(如果点击源是图像)。通过将其与经典Click
事件相结合,您可以获得点击图像。
private Image buttonDownImage;
private void Button_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
buttonDownImage = e.OriginalSource as Image;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
if (buttonDownImage != null)
{
//The click source the buttonDownImage
}
}
原因是路由策略,这意味着事件正在采取的方式。有关此路由策略的更多信息,请参阅MSDN或此WPF tutorial。