2014-02-20 2 views
1

У меня есть холст с детьми.wpf canvas get child name

<Canvas Name="Canvas" MouseDown="getElements"> 
    <Rectangle Height="200" Width="200" Name="Element1"/> 
    <Rectangle Height="200" Width="200" Name="Element2"/> 
</Canvas> 

и нажав на холст элемент Я хочу, чтобы получить имя щелкнутого элемента с чем-то вроде этого:

public void getElements(object Sender, EventArgs e) 
{ 
    DependencyObject dpobj = Sender as DependencyObject; 
    string name = dpobj.GetValue(FrameworkContentElement.NameProperty) as string; 

    Console.WriteLine("Element Clicked: " + name); 
} 

, но я только получить имя холста. может ли кто-нибудь помочь мне получить имена щелкнутых элементов?

благодарит заранее!

ответ

3

С MouseDown направляется событие вместо EventArgs использования RoutedEventArgs или MouseDown вы можете использовать MouseButtonEventArgs. Это даст вам OriginalSource собственность, и вы можете попробовать получить Name из e.OriginalSource:

private void getElements(object sender, MouseButtonEventArgs e) 
{ 
    var elementName = (e.OriginalSource as FrameworkElement).Name; 
} 
0

Событие направляется из элементов на холсте. Чтобы получить оригинал можно использовать вместо RoutedEventArgs:

public void getElements(object Sender, RoutedEventArgs e) 
{ 
    DependencyObject dpobj = e.OriginalSource as DependencyObject; 
    string name = dpobj.GetValue(FrameworkContentElement.NameProperty) as string; 

    Console.WriteLine("Element Clicked: " + name); 
} 
0

Вы можете создать обработчик событий для события MouseLeftButtonUp на холсте (как WPF использует перенаправленные события, событие будет «пузырь» до родители, и там тоже будут воспитаны). Код XAML будет выглядеть примерно так:

<Window x:Class="CanvasChildren.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Canvas MouseLeftButtonUp="UIElement_OnMouseLeftButtonUp"> 
     <Rectangle Canvas.Top="10" Canvas.Left="10" Height="200" Width="200" Name="Element1" Fill="LightBlue"/> 
     <Rectangle Canvas.Left="250" Canvas.Top="100" Height="200" Width="200" Name="Element2" Fill="DarkSalmon"/> 
    </Canvas> 
</Window> 

В коде позади файла, вы можете получить исходный объект, который щелкнул путем доступа к Source свойство аргументов события, как показано в этом коде:

private void UIElement_OnMouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
{ 
    var rectangle = (Rectangle) e.Source; 
    var name = rectangle.Name; 
} 

Вы можете скачать мой полный пример here (это ссылка Dropbox).