2016-04-26 13 views
0

要素の属性値を取得しようとします(カーソルがTagMouseLeftButtonDownx:Nameなどのように)。 F10がCommandBindingsを使用して押されたときにEventは常に発生しますカーソルがある場所で取得された要素の属性値

XAML:

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

コード:DirectlyOver

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

私だけControl.Elementを得ることができます。それは正確に私が探しているものではありません。

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

私はWindows.Formsを使用していません。 Tag="FolderNameOrWhatever"で私はアクションを処理したい。子どもがいるところにTagがない場合、私はまた、親がTag必要です。

私は自分の問題に合った何も見つけませんでした。

誰かが助けることができますか?私はC#で新しいです。 JSでは私はそれを解決することができますが、C#は非常に異なっています。

+0

あなたはVisualTreeHelper' 'で見たことがありますか?これは、親コントロールを取得するためにビジュアルツリーをクロールするために使用するものです。 –

+0

ありがとう、はい私はした。私はそれを行うもう一つの短い方法があると思った。 しかし、私はまだどのコマンドを使用して、要素属性にあるカーソルを取得するのか分かりません。それは私の主な問題です。 :( –

+0

どうすればいいですかhttp://stackoverflow.com/questions/45813/wpf-get-elements-under-mouse –

答えて

0

は解決:VisualTreeHelperを行うには

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); 
} 

もう一つの方法は、この(ない完全なコード)のようなものです:

..... 
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); 
} 
..... 
関連する問題