簡體   English   中英

DockPanel Suite:打開“文檔”選項卡的位置?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM