Из вашего описания неясно, хотите ли вы точно расположить пузырь над вновь созданной вкладкой, или если вы в порядке, когда он появляется над полоской вкладок, в фиксированном положении по оси x, но позиционируется правильно на основе y- Положение оси полосы (это более простой из двух подходов).
Поэтому я предоставлю решение для более простого сценария и варианты для более сложного сценария.
Сначала простое решение. Когда вкладки находятся сверху, значения Bounds.Top и ClientRectangle.Top не совпадают. Когда вкладки находятся внизу, они есть. Мы можем использовать эту информацию вместе с Bounds.Height и Bounds.Top, чтобы вычислить правильное положение оси Y.
Ниже приведен пример кода, который делает именно это, хотя и Naiive. (Например, он не обрабатывает документ сразу после создания, отличного от того, который произошел из-за перетаскивания пользователем окна, это остается в качестве упражнения для читателя.)
При настройке DockContent зарегистрируйте событие:
class DocumentWindow : DockContent {
//...
}
DocumentWindow doc = new DocumentWindow();
doc.Text = "Document 1";
doc.DockStateChanged += new EventHandler(doc_DockStateChanged);
doc.Show(this.dockPanel1, DockState.Document);
При обработке события:
void doc_DockStateChanged(object sender, EventArgs e)
{
DockContent doc = sender as DockContent;
if (doc != null)
{
if (doc.DockState == DockState.Document)
{
Debug.Write("Client:");
Debug.WriteLine(doc.ClientRectangle);
Debug.Write("Bounds:");
Debug.WriteLine(doc.Bounds);
int y = doc.ClientRectangle.Top == doc.Bounds.Top ? doc.ClientRectangle.Bottom : doc.Bounds.Top;
this.toolTip1.Show("You may tear this \r\nsucker out any \r\ntime you like!", doc.PanelPane, doc.PanelPane.Right, y, 5000);
}
}
}
Если вы хотите причудливого подхода, все будет не так просто. Варианты, которые я придумал
для вас ниже:
1) Измените код базовой библиотеки, чтобы сделать класс DockPaneStripBase.Tab общедоступным и открыть прямоугольник вкладок.
2) Реализуйте свой собственный DockPaneStrip, как показано в коде приложения DockSample.
3) Изучите код для вариантов 1 и / или 2 и разработайте схему, которая позволит вам вычислить место для размещения всплывающих подсказок.
К вашему сведению, для тех, кто читает это, кто хочет понять количество усилий, вовлеченных в причудливый подход.
Исходный код для WeifenLuo DockPanel и приложения DockSample может быть получен из:
http://sourceforge.net/projects/dockpanelsuite/files/DockPanel%20Suite/2.5.0%20RC1/
Это имя пакета, оканчивающееся на _Src.