右键单击时选择TreeViewItem
本文关键字:TreeViewItem 选择 单击 右键 | 更新日期: 2023-09-27 18:28:30
我希望能够右键单击程序中的TreeViewItem
。以前,(在这个问题中)我试图通过从任何我想允许选择TreeViewItem
的地方调用SetSelectedItem()
方法来实现这一点。这个问题的答案被编译并运行,但实际上并没有让TreeViewItem
像我想要的那样被选中。
我一直在看的这个问题和这个问题几乎完全一样,除了hierachicalDataTemplate
。我的TreeView
没有hierachicalDataTemplate
,如果这对我的程序来说是不必要的,我想避免它。
这是我正在编译的内容,但不会影响现在的更改。。。
//Sets selected item in TreeView and passes to MainWindowViewModel
private void SetSelectedItem()
{
MainWindowViewModel.SelectedItem = Tree_One.SelectedItem as TreeViewItem;
}
//**** This is the function this question is about -- It's Supposed to select item on RightClick
private void Tree_One_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
SetSelectedItem();
}
因此,为了清楚起见,我右键单击的节点并没有像预期的那样被选中。我做错了什么?我该如何解决?
更新:
我想我知道问题出在哪里了。我在这个问题中的代码实际上并没有更改所选项目,它只是通过选择当前所选项目来重申,然后重新选择它。如果有一种方法可以将所选项目更改为右键单击的项目,它将完美运行。有关于如何做这样的事情的线索吗?
@alex2k8对这个问题的回答正是我想要的,也是我用来解决问题的。
感谢所有伸出援手的人。
对不起我英语不好。我正在使用MS VS 2017版本15.9.1。
所以,你通过鼠标右键点击选择treeviewItem的所有方法都不起作用——我不知道为什么。
但我找到了一种工作方法:
private void Treeview1_MouseRightButtonDown(object sender, MouseButtonEventArgs e){
// The source from the Mouse Event Args is a TreeViewItem.
var treeViewitem = e.Source as TreeViewItem;
// Than works your Code in the above Posts!
if (treeViewitem != null)
{
treeViewitem.IsSelected = true;
e.Handled = true;
}
}
cuMarc
请参阅下面的示例片段,该片段能够获得所选项目
public partial class MainWindow : Window
{
public List<Item> Items { get; set; }
public MainWindow()
{
InitializeComponent();
Items = new List<Item>();
for (int i = 0; i < 10; i++)
{
Items.Add(new Item() {ItemName="Item " + i.ToString() });
}
this.DataContext = this;
}
private void TreeView1_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
if ((sender as TreeView).SelectedItem != null)
{
Item itm = (Item)(sender as TreeView).SelectedItem;
Console.WriteLine(itm.ItemName);
}
}
}
public class Item
{
public string ItemName { get; set; }
}
XAML
<TreeView Name="TreeView1" MouseRightButtonDown="TreeView1_MouseRightButtonDown" ItemsSource="{Binding Items}">
<TreeView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding ItemName}" />
</DataTemplate>
</TreeView.ItemTemplate>
</TreeView>
这可能有点过时,但我刚刚找到了一个非常好的解决方案。至少是我的
TreeView现在支持NodeMouseClick事件,您可以在该事件中选择单击的节点。
private void treeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
this.treeView.SelectedNode = e.Node;