一个窗体 window
两个usercontrol
ucMenu & ucTabControl怎样实现,
在选择menuitem 的时候, 使tabcontrol 切换到相应的tab上?
请大家帮帮忙,给出实现思路 (我知道可以把menu 和 tabcontrol 做到以个usercontrol中, 但我现在需要把它做成两个usercontrol)
做惯了web程序, 转到c/s 有些晕车...
两个usercontrol
ucMenu & ucTabControl怎样实现,
在选择menuitem 的时候, 使tabcontrol 切换到相应的tab上?
请大家帮帮忙,给出实现思路 (我知道可以把menu 和 tabcontrol 做到以个usercontrol中, 但我现在需要把它做成两个usercontrol)
做惯了web程序, 转到c/s 有些晕车...
现在的情况是, menu 和 tabcontrol 分别做成了两个usercontrol, 放到了一个window中,
这种情况下, 我该怎么实现呢? 我很想知道, wpf中,两个usercontrol间该怎样交互.
在WPFWindows load 的时候加入类似代码: usercontrol1.w=this;usercontrol2.w=this;这样usercontrol1就可以通过w 获取到usercontrol2,即w.usercontrol2当然也可以调用usercontrol2的public方法。
谢谢charles_y 我还想再进一步问下,
这种情况下, 耦合性会增加. 比如, 我的usercontrol1 (Menu) 一直存在, 而 usercontrol2 (TabControl)是动态加入到主窗体的(有时候需要显示, 有时候不需要显示). 这样的话, 就不能在menu的click事件中处理tabcontrol 的了. 如果窗体中usercontrol 的数量进一步增加, 代码应该会非常复杂.可不可能用委托的机制? 如果可以, 能不能给个思路呢? (或者别的办法也可以)
thanks!
谢谢Sandy945
感觉第二个办法更明了些. 如果写findcontrol, 应该是先找到父节点 window, 再找到tabcontrol.
谢谢!
Menu中直接引用到 Tabcontrol ,维护一个tabcontrol的表(数组什么的),然后对这个表进行操作。
Menu 可以通过MainWindow来操作其中的Tabcontrol表(以及其他的属性)。我能想到的就是这样的,其他即使有办法似乎也没办法减少复杂性。
感谢两位的帮助.
方法都不错. 自己也试着用了下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);
}
}