[英]DockPanel Suite : Open Document-tab Location?
我們正在修改winforms用戶界面以使用Weifen Luo DockPanel Suite,並且由於我們的舊UI沒有選項卡,因此當新窗口停靠在文檔區域時,我們希望顯示一個氣球工具提示,告知用戶撕下文檔,然后將其浮動到所需位置。
我認為要做到這一點,我需要能夠以編程方式確定停靠窗口的選項卡的位置。 我們的DockPanel的DocumentStyle設置為DockingWindow,因此對於停靠在“文檔”區域的所有窗口始終顯示選項卡。
有任何想法嗎?
根據您的描述,不清楚是要精確地將氣泡定位在新創建的標簽上,還是可以將氣泡顯示在標簽條上,是否固定在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結尾的程序包名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.