一个窗体 window
两个usercontrol
ucMenu  &  ucTabControl怎样实现, 
在选择menuitem 的时候,  使tabcontrol 切换到相应的tab上?
请大家帮帮忙,给出实现思路 (我知道可以把menu 和 tabcontrol 做到以个usercontrol中, 但我现在需要把它做成两个usercontrol)
做惯了web程序, 转到c/s 有些晕车...

解决方案 »

  1.   

    设置SelectedIndex的前提是在menuitem的click事件中, 能得到tabcontrol对象.
    现在的情况是, menu 和 tabcontrol 分别做成了两个usercontrol, 放到了一个window中, 
    这种情况下, 我该怎么实现呢? 我很想知道, wpf中,两个usercontrol间该怎样交互.
      

  2.   

    通过主窗体usercontrol1 和2 都加个对象指向主窗体....
      

  3.   

    charles_y, 可以给段代码看看么?
      

  4.   

    假设主窗体叫 WPFWindow,在UserControl1和userControl2中加public 的 WPFWindow变量w
    在WPFWindows load 的时候加入类似代码: usercontrol1.w=this;usercontrol2.w=this;这样usercontrol1就可以通过w 获取到usercontrol2,即w.usercontrol2当然也可以调用usercontrol2的public方法。 
      

  5.   

    两个办法,一是通过 类似FindControl的东西二是 通过引用。 在 menu 中持有 tabcontrol 类型的字段 通过构造函数或者属性设置,然后 menu 中就可以访问 tabcontrol 了
      

  6.   

    貌似可以解决我的问题.
    谢谢charles_y 我还想再进一步问下, 
    这种情况下, 耦合性会增加. 比如,  我的usercontrol1 (Menu) 一直存在,  而 usercontrol2  (TabControl)是动态加入到主窗体的(有时候需要显示, 有时候不需要显示).  这样的话, 就不能在menu的click事件中处理tabcontrol 的了. 如果窗体中usercontrol 的数量进一步增加, 代码应该会非常复杂.可不可能用委托的机制?  如果可以, 能不能给个思路呢? (或者别的办法也可以)
    thanks!
      

  7.   


    谢谢Sandy945
    感觉第二个办法更明了些.  如果写findcontrol, 应该是先找到父节点 window,  再找到tabcontrol. 
    谢谢!
      

  8.   

    还一个办法就是在tabcontrol 内部把tabChange 定义成委托,留给需要的类需要的类只需要订阅相关事件 就可以了
      

  9.   


    Menu中直接引用到 Tabcontrol ,维护一个tabcontrol的表(数组什么的),然后对这个表进行操作。
    Menu 可以通过MainWindow来操作其中的Tabcontrol表(以及其他的属性)。我能想到的就是这样的,其他即使有办法似乎也没办法减少复杂性。
      

  10.   

    结贴给分了
    感谢两位的帮助.
    方法都不错. 自己也试着用了下delegate. 在Menu中 定义个event OpenItem, 
    public event RoutedEventHandler OpenItem;
    并在menu click 事件中引发.
    在外面的主窗体 window中, 订阅这个事件
     this.myMenu.OpenItem += new RoutedEventHandler(OpenNewItem);
     private void OpenNewItem(object sender, RoutedEventArgs e)
            {
                MenuItem item= e.OriginalSource as MenuItem;
                if (item !=null)
                {
                 //....logic code..........在窗体中的耦合, 
                 //对usercontrol 来说, menu 并不知道 tabcontrol的存在  
                    this.myTab.xxMethod(item);
                }
            }