2017-01-10 2 views
0

привет Я довольно новыми для WPF C# У меня есть TreeView, который заполняется во время выполнения и вот мой XAML кодМОФ TextBlock фокус на мыши щелкните правой кнопкой мыши

<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); 
} 
Смежные вопросы