2017-01-10 6 views
0

をクリックしてくださいこんにちは私は、C#のWPFにはかなり新しいです、私は私が右クリックしたときに、私が欲しいもの、実行時に読み込まとここに私のXAMLコードは

<StackPanel Orientation="Horizontal"> 
    <Image Source="Properties\accessories-text-editor-6.ico" Margin="0,0,5,0" /> 
    <TextBlock Text="{Binding Name}" Foreground="Green" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown" MouseRightButtonDown="TextBlock_MouseRightButtonDown" > 
     <TextBlock.ContextMenu> 
      <ContextMenu> 
       <MenuItem Header="HeadLine" ></MenuItem> 
       <MenuItem Header="Textblock" ></MenuItem> 
       <MenuItem Header="Author" ></MenuItem> 
       <MenuItem Header="PageNumber" ></MenuItem> 
       <MenuItem Header="RunningTitle" ></MenuItem> 
       <MenuItem Header="Illustration" ></MenuItem> 
      </ContextMenu> 
     </TextBlock.ContextMenu> 
    </TextBlock> 
</StackPanel> 

ですツリービューがある持っていますツリービュー内にあるテキストブロック。テキストブロックにフォーカスが必要です。今のところコンテキストメニュー項目が表示されます。

右クリックしたテキストブロックのインデックスを取得するにはどうすればよいですか?私はその項目に集中することができます。

private void TextBlock_MouseRightButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    TextBlock txt = sender as TextBlock; 
    //do whatever you want with the TextBlock... 
} 

ツリービューのコンテキストである場合: は

答えて

1

AのTextBlockが集中することができません...しかし、あなたは、送信者の引数をキャストしてのMouseRightButtonDownイベントハンドラで、それへの参照を取得することができますありがとう親のTreeViewItemを選択することができます。

private void TextBlock_MouseRightButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    TextBlock txt = sender as TextBlock; 
    TreeViewItem tvi = FindParent<TreeViewItem>(txt); 
    if (tvi != null) 
     tvi.IsSelected = true; 
} 

private static T FindParent<T>(DependencyObject dependencyObject) where T : DependencyObject 
{ 
    var parent = VisualTreeHelper.GetParent(dependencyObject); 

    if (parent == null) return null; 

    var parentT = parent as T; 
    return parentT ?? FindParent<T>(parent); 
}