将 TreeViewItem 标记传递给事件处理程序 c#
Pass TreeViewItem Tag to Event Handler c#
好的,下面是我目前尝试向自定义文件浏览器添加菜单的代码。现在我正在研究一个新的文件夹按钮,但最终想在菜单中添加更多项目。我的问题是如何将标签从项目传递到 Menu_MouseLeftClick 事件处理程序。在此先感谢您的帮助我是新人在此先感谢。
using System.Windows;
using System.Windows.Controls;
using System.IO;
using System.Collections.Generic;
using System;
namespace TreeViewWithMenu
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
//Create Objects and Handlers
InitializeComponent();
PopTree();
SetMenu();
this.treeView.MouseRightButtonDown += TreeView_MouseRightButtonDown;
this.menu.MouseLeftButtonDown += Menu_MouseLeftButtonDown;
}
private void TreeView_MouseRightButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
//Make Folder Visable
this.menu.Visibility = Visibility.Visible;
}
private void SetMenu()
{
//Set Menu for new Folder
MenuItem MeItem = new MenuItem();
MeItem.Header = "New Folder";
MeItem.Tag = "New Folder";
menu.Items.Add(MeItem);
menu.Visibility = Visibility.Hidden;
}
private void Menu_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
//Create New FOlder
Directory.CreateDirectory("");
}
internal void PopTree()
{
//Populate Tree
List<string> CleanDirs = new List<string>();
string [] Dirs = Directory.GetDirectories(Environment.GetFolderPath(Environment.SpecialFolder.Desktop));
string temp;
foreach (string dir in Dirs)
{ temp = SplitPath(dir); CleanDirs.Add(temp.ToUpper()); }
foreach(var ShowIn in CleanDirs)
{
TreeViewItem TreeViewDirectory = new TreeViewItem();
TreeViewDirectory.Tag = ShowIn;
TreeViewDirectory.Header = ShowIn;
TreeViewDirectory.Focusable = true;
this.treeView.Items.Add(TreeViewDirectory);
}
}
private string SplitPath(string path)
{
string[] temp = path.Split('\');
return temp[temp.Length - 1];
}
}
}
`
使用 SelectedItem
属性 从 TreeView
访问当前选择的项目,这应该与您右键单击的项目相同。
private void TreeView_MouseRightButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
if (treeView.SelectedItem == null)
return;
var selectedTag = ((TreeViewItem)treeView.SelectedItem).Tag;
// do something with the tag
}
不要手动添加控件 (TreeViewItem)。
使用集合作为视图模型
绑定到来自 treeView ItemsSource 属性 的集合。
使用 DataTemplate 将视图模型上的相关属性绑定到 TreeViewItem 控件上的依赖属性。
所有的羽化应该来自 Xaml 文件
好的,下面是我目前尝试向自定义文件浏览器添加菜单的代码。现在我正在研究一个新的文件夹按钮,但最终想在菜单中添加更多项目。我的问题是如何将标签从项目传递到 Menu_MouseLeftClick 事件处理程序。在此先感谢您的帮助我是新人在此先感谢。
using System.Windows;
using System.Windows.Controls;
using System.IO;
using System.Collections.Generic;
using System;
namespace TreeViewWithMenu
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
//Create Objects and Handlers
InitializeComponent();
PopTree();
SetMenu();
this.treeView.MouseRightButtonDown += TreeView_MouseRightButtonDown;
this.menu.MouseLeftButtonDown += Menu_MouseLeftButtonDown;
}
private void TreeView_MouseRightButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
//Make Folder Visable
this.menu.Visibility = Visibility.Visible;
}
private void SetMenu()
{
//Set Menu for new Folder
MenuItem MeItem = new MenuItem();
MeItem.Header = "New Folder";
MeItem.Tag = "New Folder";
menu.Items.Add(MeItem);
menu.Visibility = Visibility.Hidden;
}
private void Menu_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
//Create New FOlder
Directory.CreateDirectory("");
}
internal void PopTree()
{
//Populate Tree
List<string> CleanDirs = new List<string>();
string [] Dirs = Directory.GetDirectories(Environment.GetFolderPath(Environment.SpecialFolder.Desktop));
string temp;
foreach (string dir in Dirs)
{ temp = SplitPath(dir); CleanDirs.Add(temp.ToUpper()); }
foreach(var ShowIn in CleanDirs)
{
TreeViewItem TreeViewDirectory = new TreeViewItem();
TreeViewDirectory.Tag = ShowIn;
TreeViewDirectory.Header = ShowIn;
TreeViewDirectory.Focusable = true;
this.treeView.Items.Add(TreeViewDirectory);
}
}
private string SplitPath(string path)
{
string[] temp = path.Split('\');
return temp[temp.Length - 1];
}
}
} `
使用 SelectedItem
属性 从 TreeView
访问当前选择的项目,这应该与您右键单击的项目相同。
private void TreeView_MouseRightButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
if (treeView.SelectedItem == null)
return;
var selectedTag = ((TreeViewItem)treeView.SelectedItem).Tag;
// do something with the tag
}
不要手动添加控件 (TreeViewItem)。 使用集合作为视图模型 绑定到来自 treeView ItemsSource 属性 的集合。 使用 DataTemplate 将视图模型上的相关属性绑定到 TreeViewItem 控件上的依赖属性。
所有的羽化应该来自 Xaml 文件