2016-04-26 83 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); 
} 
..... 
相關問題