2016-01-24 3 views
0

Я рисую несколько объектов Path в холст WPF на основе коллекции. Я хочу, чтобы всплывающее окно отображалось с некоторой информацией о конкретном элементе в коллекции на мыши над Путь. Тем не менее, я не уверен, как отслеживать, на какой путь запускается событие (использование отправителя дает информацию только о Пути, а не о том, какая коллекция была нарисована). Как она стоит у меня есть это:Отслеживание того, что произошло событие мыши мыши.

Добавление формы & событие:

For (int i = 0; i < Collection.Count ; i++) 
{ 
    Path p = new Path(); 
    p.MouseEnter += P_MouseEnter; 
    ... 
    TrackerCanvas.Children.Add(p); 
} 

и позже, событие, которое является общим для всех из них:

private void P_MouseEnter(object sender, MouseEventArgs e) 
{ 
    dialogPopUp.IsOpen = true; 
    //no way of knowing which collection object triggered event 
} 

Сначала я попытался простирающийся MouseEventHandler чтобы сделать пользовательский объект, чтобы я мог, скажем, передать некоторую информацию делегату:

p.MouseEnter += new MyPathMouseEventHandler(i, P_MouseEnter); 

Но это не сработает, поскольку MouseEventHandler запечатан и путь. MouseEnter нужен MouseEventHandler.

Тогда я подумал, может быть, я мог бы расширить Path и создать MyPath, который имеет свойство «IndexOfPath» или другую полезную информацию, которую я мог бы ссылаться на отправителя. Например:

MyPath path = (MyPath)sender; 
MyItem = Collection[path.IndexOfPath]; 

Однако путь запечатан ... Так что это вне окна.

Кто-нибудь знает, как я мог это сделать?

+0

'var path = (Path) отправитель;'. Разве это не должен быть объект «Путь», который запускал «MouseEnter»? –

+0

Возможно, мне следовало бы лучше сформулировать название. Да, я могу узнать Путь, но Путь не содержит никакой информации о том, на какой объект был нарисован Путь, если вы понимаете, что я имею в виду? Не уверен, как сделать заголовок понятным, но я отредактировал описание, чтобы лучше объяснить его. – Joe

ответ

0

В случае, если кто-то наткнется на это. В конце концов, самый простой (не обязательно лучший?) Способ получить это - установить свойство «Тег» Path для связанного экземпляра объекта при создании. С этого момента это можно получить через любые события через источник события.

Смежные вопросы