【问题标题】:how to select treeviewitem in wpf如何在wpf中选择treeviewitem
【发布时间】:2009-10-13 12:37:51
【问题描述】:

大家好!我是 wpf 的新手,所以请原谅我,我想要更多! 我正在尝试构建一个应用程序。我有一个限制数据源的树视图。没关系。我有两个问题。第一的;如何从树视图中选择一个项目?当我选择一个项目时,我想弹出一个新窗口;当我单击另一个项目时;另一个窗口弹出。第二个问题是我不能改变前景和字体。提前谢谢大家

命名空间 CellBiology { 公共部分类 TreeView { 公共树视图() { this.InitializeComponent(); 绑定树视图();

    }

    public void BindTreeView()
    {
        OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\CellBiology.mdb;Persist Security Info=True");

        try
        {
            con.Open();
            OleDbCommand cmd = new OleDbCommand("Select * from Topics", con);
            OleDbDataAdapter da = new OleDbDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds, "Topics");
            int row = ds.Tables["Topics"].Rows.Count;
            List<MyMenuItem> myList = new List<MyMenuItem>();


            if (row > 0)
            {

                for (int i = 0; i <= row - 1; i++)
                {
                    myList.Add(new MyMenuItem(Convert.ToInt32(ds.Tables["Topics"].Rows[i][0].ToString()), ds.Tables["Topics"].Rows[i][1].ToString(), 0));

                    for (int j = 0; j <= row - 1; j++)
                    {

                        if (ds.Tables["Topics"].Rows[i][0].ToString() == ds.Tables["Topics"].Rows[j][2].ToString())
                        {

                            myList.Add(new MyMenuItem(Convert.ToInt32(ds.Tables["Topics"].Rows[j][0].ToString()), ds.Tables["Topics"].Rows[j][1].ToString(), Convert.ToInt32(ds.Tables["Topics"].Rows[i][0].ToString())));



                            for (int k = 0; k <= row - 1; k++)
                            {

                                if (ds.Tables["Topics"].Rows[j][0].ToString() == ds.Tables["Topics"].Rows[k][2].ToString())
                                {

                                    myList.Add(new MyMenuItem(Convert.ToInt32(ds.Tables["Topics"].Rows[k][0].ToString()),
                                    ds.Tables["Topics"].Rows[k][1].ToString(),
                                    Convert.ToInt32(ds.Tables["Topics"].Rows[j][0].ToString())));


                                    for (int l = 0; l <= row - 1; l++)


                                        if (ds.Tables["Topics"].Rows[k][0].ToString() == ds.Tables["Topics"].Rows[l][2].ToString())
                                        {

                                            myList.Add(new MyMenuItem(Convert.ToInt32(ds.Tables["Topics"].Rows[l][0].ToString()),
                                                ds.Tables["Topics"].Rows[l][1].ToString(), Convert.ToInt32(ds.Tables["Topics"].Rows[k][0].ToString())));





                Dictionary<int, TreeViewItem> flattenedTree = new Dictionary<int, TreeViewItem>();
                foreach (MyMenuItem item in myList)
                {

                    TreeViewItem treenode = new TreeViewItem();
                    treenode.Header = item.TopicName;
                    treenode.Tag = item;
                    flattenedTree.Add(item.TopicID, treenode);
                    if (flattenedTree.ContainsKey(item.TopLevelID))
                    {


                        flattenedTree[item.TopLevelID].Items.Add(treenode);




                    }
                    else
                    {

                        myTreeView.Items.Add(treenode);





    }
    public class MyMenuItem
    {

        internal int TopicID { get; set; }
        internal string TopicName { get; set; }
        internal int TopLevelID { get; set; }


        internal MyMenuItem(int topicid, string topicname, int toplevelid)
        {

            TopicID = topicid;
            TopicName = topicname;
            TopLevelID = toplevelid;




    private void myTreeView_SelectedItemChanged(object sender, RoutedEventArgs e)
    {

        **how  can i code here?**




    }

}

}

【问题讨论】:

    标签: wpf treeview


    【解决方案1】:

    改变字体:

    myWindow.FontFamily = new FontFamily("Font Name");
    

    其中“字体名称”是已知字体类型的名称,例如。 “Times New Roman”或“Comic Sans MS”。您可以找到更多用法here

    改变前景色:

    myWindow.Foreground = new SolidColorBrush(Colors.Red);
    

    Colors.Red 可以是您选择的任何“预定义”颜色。

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      回答您的“我如何在这里编码?”具体来说,您可以执行以下操作来访问 TreeViewItem:

      TreeViewItem selectedTreeViewItem = ((TreeViewItem)e.NewValue);
      

      一旦你得到它,你就可以通过它的 DataContext 属性访问该项目所代表的数据,如下所示:

      MyDataType myData = (MyDataType)selectedTreeViewItem.DataContext;
      

      要弹出新窗口,您可以创建 Window 子类的实例,如果您希望它是模态的,则使用 ShowDialog;如果您希望同时打开多个窗口,则使用 Show。

      【讨论】:

      • 感谢您的评论。但我不能让它工作?我在哪里做错了?
      猜你喜欢
      • 2011-02-14
      • 2014-08-07
      • 2011-08-23
      • 1970-01-01
      • 2016-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-28
      相关资源
      最近更新 更多