2017-01-10 71 views
0

你好,我是相当新的WPF C#,我这是在运行时填充,这里一个TreeView是我的XAML代码WPF文本块注重鼠标右键单击

<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> 

我要的是,当我点击右键树视图内的文本块。文本块需要重点关注。截至目前它所做的是显示上下文菜单项。

那么如何获得右键单击的文本块的索引?所以我可以专注于该项目。 谢谢

回答

1

一个TextBlock不能集中...但你可以通过铸造发件人的说法得到在的MouseRightButtonDown事件处理程序的引用:

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

如果你在一个TreeView的情况下您可能需要选择父级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); 
}