最近在利用WPF做程序的客户端,其中有一个页面叫做Dashboard,里面有很多个自定义的UserControl的GroupBox。本来想通过双击每一个小GroupBox的Title,跳转到另外一个TabControl里面的TabItem。可是一直没有办法实现跳转。
经过查找发现是因为双击自定义的UserControl的时候会处罚所在的父控件TabItem,以及TabControl的MouseDoubleClick事件,导致刚刚做完的跳转,又马上跳转会到当前的TabItem。
一开始度娘上说,可以通过处理e.Handle来解决
void TabItem_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
if (e.Source is TabItem)
{
e.Handled = true;
Debug.WriteLine(MainTabControl.SelectedIndex.ToString());
}
}
引用自http://blog.csdn.net/song_qingwei/article/details/50215135
但是使用后还是不行,最后通过这篇文章找到答案
https://q.cnblogs.com/q/64242/
解决摘要:
当自定义控件的主容器没有设置背景色(背景透明)时,在自定义控件主容器上的移动 不会触发MouseDoubleClick,然后进入用户控件的子控件时,才会触发MouseDoubleClick,然后往上冒泡,这样会触发多次,并且通过e.Handled无法阻止冒泡,并且e.OriginalSource 始终是指代用户控件。但是设置背景后,情况就是只要进入自定义控件,就只冒泡一次,在子控件之间切换不会再次冒泡