在WPF里,我想在A窗体中引用B窗体的一个控件,请问如何实现

解决方案 »

  1.   

    引用来做什么?就算是为了要启动另一个窗体的动画,我觉得和winform什么的作法一样,就是用事件。
    不要引用控件本身。
    既然是面向对象,那你在A窗口里假如说可以直接引用B窗口里的控件,那这B窗口里的控件算是属于A的呢,还是B的呢?我认为把A和B看作独立的个体,它们之间的通讯用事件来传递,这种原则在winform/wpf/silverlight……任何地方都适用。
      

  2.   

    我想实现的效果类似于VS中的新建项目功能,在弹出的新建项目窗体中点击“确定”后,在主窗体的解决方案资源管理器中,以树形结构显示出该项目的基本框架
    可是我不知道在弹出的窗体中,如何操作主窗体中的treeView控件
      

  3.   

    也就是说弹出的窗体中有好几种选项,根据这个选项来显示不一样的treeView?
      

  4.   

    如果有好多种树状结构要显示,而且它们之间甚至很不一样,这种时候也许可以考虑用MEF吧。总之就是这个TreeView数据源的数据提供者抽像出来用接口表示,根据在弹出对话框的选择项,动态的加载合适的数据提供者(dll).
      

  5.   

    设置一个B引用的全局变量,这样A就可以拿到B窗体了
      

  6.   

    建议用全局变量要么就在B窗口new出A窗口  不就能得到A窗口的控件了么        public Activity Create(DependencyObject target)
            {
                ChildWindowCallAgentPro cwAgent = new ChildWindowCallAgentPro();
                cwAgent.ShowDialog();            if ((string)cwAgent.btnOK.Tag == "1")
                {
                    return new CallAgent
                    {
                        DisplayName = "",
                        AgentName = cwAgent.cbxAgentName.SelectionBoxItem.ToString(),
                        ObjType = cwAgent.cbxObjType.SelectionBoxItem.ToString(),
                        Method = cwAgent.txtMethod.Text,
                        Params = cwAgent.txtParams.Text,
                        Expiration = int.Parse(cwAgent.txtExpiration.Text),
                        _activityID = _systemService.GetNextID("Activity")
                    };
                }
                else
                    return null;
            }
    类似这个
      

  7.   

        A窗体事件中引用B窗体的有返回值的构造窗体函数,在A窗体中把返回值改为TreeViewItem,然后把TreeView.Add(TreeViewItem).
      

  8.   

    自己解决了,在B窗口中用这句代码就可以获取主窗口(A窗口是主窗口)中的treeView控件了,不过还是十分感谢各位的宝贵意见
    TreeView tr = Application.Current.MainWindow.FindName("treeView1") as TreeView;