WPF获取treeviewitem的内容

时间:2017-06-09 01:35:10

标签: c# wpf treeview

我需要检查用户每次更改时选择的treeviewitem。我使用SelectedItemChanged方法或其他任何方法。它工作正常,但现在我需要为每个可能的switch case执行treeviewitem。但我无法做到这一点,因为我不知道如何得到它的名称。我在互联网上查了一下,但有些人说使用treeview.SelectedItem,但它会返回System.Windows.Controls.TreeViewItem Header: Items.Count:0。我想知道我是否可以完全在.cs代码文件中执行此操作,或者是否必须使用数据绑定等。

感谢您的帮助。

修改

以下是我如何设置treeview和treeviewitems。它们都像第二个例子。

<TreeView x:Name="treeview" Margin="10,10,0,4" HorizontalAlignment="Left" Width="192" Background="#FFA45353" SelectedItemChanged="treeview_SelectedItemChanged"">
        <TreeViewItem IsExpanded="False">
            <TreeViewItem.Header>
                <StackPanel Orientation="Horizontal">
                    <Image Source="./Resources/smallicons/icon.jpg"/>
                    <TextBlock Text=" Main" FontSize="14"/>
                </StackPanel>
            </TreeViewItem.Header>
            <!--==============================================================================================-->
            <TreeViewItem>
                <TreeViewItem.Header>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="First" Foreground="Black" />
                    </StackPanel>
                </TreeViewItem.Header>
            </TreeViewItem>
            <!--==============================================================================================-->

2 个答案:

答案 0 :(得分:1)

你在找这个吗?

TreeViewItem selectedNode = (TreeViewItem)treeView.SelectedItem;
string strSelectedNode = selectedNode.Header.ToString();

上面的代码段假定少数事情

顺便说一下,这段代码是

的一部分
private void TreeViewItem_Selected(object sender, RoutedEventArgs e)
{
    TreeViewItem selectedNode = (TreeViewItem)treeView.SelectedItem;
    MessageBox.Show(selectedNode.Header.ToString());
}

答案 1 :(得分:0)

好的......根据你的treeview和treeview项目设置,你必须编写类似这样的代码..

private void treeview_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
    {    
            TreeViewItem selectedNode = (TreeViewItem)treeview.SelectedItem;
            var sp = selectedNode.Header as StackPanel;
            var tb = sp.Children[0] as TextBlock;
            var selecteditem = tb.Text;
            //MessageBox.Show(selecteditem);
            switch (selecteditem)
            {
                case "Main":
                    MessageBox.Show(selecteditem);
                    break;
                case "First":
                    MessageBox.Show(selecteditem);
                    break;
                default:
                    MessageBox.Show("no matching item found");
                    break;
            }
        }

在这里,我正在挖掘选定的树视图项以获取所选树视图项的文本。您可能需要稍微调整一下代码才能使其完全正常运行。如果您需要任何帮助,请告诉我。