区分WPF路由事件中的单击元素

时间:2017-05-30 15:50:46

标签: c# wpf xaml

WPF中的

我正在使用带有自定义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事件的路由事件参数来区分原始元素吗?

谢谢

1 个答案:

答案 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