Во-первых, измените ваши обработчики событий мыши, чтобы иметь MouseEventArgs e вместо RoutedEventArgs e .
Затем вы можете использовать этот код для получения списка все элементов под мышью:
List<UIElement> list = VisualTreeHelper.FindElementsInHostCoordinates(e.GetPosition(null),
LayoutRoot as UIElement) as List<UIElement>;
Затем вы можете добавить собственную логику, чтобы увидеть, что находится под мышью, и убедиться, что все элементы выделены правильно.например, эта часть обеспечит выделение всех состояний под гаванями:
private void MouseOverHarbor(object sender, MouseEventArgs e)
{
List<UIElement> list = VisualTreeHelper.FindElementsInHostCoordinates(e.GetPosition(null),
LayoutRoot as UIElement) as List<UIElement>;
foreach (var item in list)
{
if (item is Path)
{
item.Opacity = 0.25; // Set state opacity
}
else if (item is Ellipse)
{
item.Opacity = 0.25; // Set harbour opacity
}
}
}
Надеюсь, это поможет вам.