我画了一些有孩子的画布。
<Canvas Name="Canvas" MouseDown="getElements">
<Rectangle Height="200" Width="200" Name="Element1"/>
<Rectangle Height="200" Width="200" Name="Element2"/>
</Canvas>
并点击一个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);
}
但我只得到画布的名称。任何人都可以帮我获取点击元素的名称吗?
提前感谢!
答案 0 :(得分:3)
由于MouseDown
是路由事件而不是EventArgs
使用RoutedEventArgs
或MouseDown
,您可以使用MouseButtonEventArgs
。它会为您提供OriginalSource
属性,您可以尝试获取Name
e.OriginalSource
:
private void getElements(object sender, MouseButtonEventArgs e)
{
var elementName = (e.OriginalSource as FrameworkElement).Name;
}
答案 1 :(得分: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);
}
答案 2 :(得分:0)
您可以在Canvas上为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链接)。