2016-04-26 54 views
0

我尝试获取元素的属性值,其中游标位于Tag,MouseLeftButtonDownx:Name等位置。该Event总是升起,当使用化CommandBindings按下F10 游标所在位置获得的元素的属性值

XAML:

<Window.CommandBindings> 
    <CommandBinding Command="Open" Executed="Executesd"/> 
</Window.CommandBindings> 
<Window.InputBindings> 
    <KeyBinding Key="F10" Command="Open"/> 
</Window.InputBindings> 

代码:

private void Executesd(object sender, ExecutedRoutedEventArgs e) 
{ 
    Point mo = Mouse.GetPosition(Window); 
    var TagName = Mouse.DirectlyOver; 
    MessageBox.Show("Mouselogic Open-Commands: " + mo.ToString() + " -> " + TagName); 
} 

随着DirectlyOver我只能拿到Control.Element。那不是我正在寻找的。

<TextBlock MouseLeftButtonDown="MaximizeToolbar" Tag="FolderNameOrWhatever">Test</TextBlock> 

我没有使用Windows.Forms。用Tag="FolderNameOrWhatever"我想要处理一个动作。如果孩子所在位置没有Tag,我还需要父母Tag

我发现没有什么与谷歌适合我的问题,得到的元素attributsname值我的光标所在的位置。

有人可以帮忙吗?我是C#的新手。在JS中我可以解决它,但C#是非常不同的。

+0

你看着'VisualTreeHelper'?这就是你将用来抓取可视化树来获得父控件的东西。 –

+0

谢谢,是的,我做到了。我认为还有另一种方法可以做到这一点。 但我仍然不知道使用哪个命令来获取游标位于的元素属性。这是我的主要问题。 :( –

+0

如何http://stackoverflow.com/questions/45813/wpf-get-elements-under-mouse –

回答

0

解决:

private void Executesd(object sender, ExecutedRoutedEventArgs e) 
{ 
    Point mo = Mouse.GetPosition((UIElement)sender); 

    FrameworkElement Happy = Mouse.DirectlyOver as FrameworkElement; 
    MessageBox.Show("Mouselogic: " + mo.ToString() + " -> " + Happy.Tag); 
} 

另一种方式做VisualTreeHelper是这样的(不完整的代码):

..... 
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(this); i++) 
{ 
    Visual VisualChild = (Visual)VisualTreeHelper.GetChild(this, i); 

    FrameworkElement Child = VisualChild as FrameworkElement; 

    MessageBox.Show("Tag " + i + ": "+ Child.Tag +", Name: "+ Child.Name); 
} 
.....