使SandDock的多個浮動面板以Tab頁形式顯示

2021-06-26 00:25:38 字數 1708 閱讀 3845

目前這個專案中使用到了sanddock控制項,效果跟vs的浮動面板一樣,可以停靠,但下面的兩個面板是各佔據乙個空間來上下"瓜分"左邊的位置

但實際上,這並不是我想要的效果,我想要的是如下所示的效果

即以tab頁的形式顯示,在網上找了好久(苦苦找尋控制項api未果),終於叫我找到了解決方案

先參考官網

其中提到乙個至關重要的方法

"sanddockmanager'sgetlayoutmethod" ,即sanddockmanager.getloyout(),相對應的是setlayout().注意這兩個都是例項方法,而非靜態.

通過呼叫這個方法,可以得到sanddock控制項布局的xml描述

controllayoutsystem 在介面上實際代表了乙個活動面板容器, splitlayoutsystem 標籤把controllayoutsystem 包含在內,它可以定義包含在它內部的面板是橫向排列,還是縱向排列, controllayoutsystem內部的controls標籤可以包含多個control,每個control都是乙個dockablewindow(活動面板),清楚了這些之後就好辦了.

思路是這樣,讓controllayoutsystem標籤只能有乙個,即只能有乙個面板容器,把所有的容器內包含的control(即活動面板)都加到同乙個容器之下,再刪除其它所有的容器!

如此一來,所有的面板就都在乙個容器中並以tab分頁的形式呈現了,實現**如下

private void showwindow(dockablewindow window, dockablewindowsmartpartinfo smartpartinfo)

else

setwindowproperties(window, smartpartinfo);

window.bringtofront();

#region 解析控制項的布局xml,並修改,目的是讓所有pad以tab分頁形式呈現

var xdoc = xdocument.parse(sanddockmanager.getlayout());

xdoc.element("layout").element("container").element("splitlayoutsystem").attribute("splitmode").value = "1";

var controllayoutsystem =

xdoc.element("layout").element("container").element("splitlayoutsystem").elements("controllayoutsystem");

if (controllayoutsystem.tolist().count > 1)

foreach (xelement element in from element in controllayoutsystem

let index = controllayoutsystem.tolist().indexof(element)

where index > 0

select element)

}sanddockmanager.setlayout(xdoc.tostring());

#endregion

}

silverlight浮動子窗體控制項的使用

元件所在的命名空間 system.windows.controls 元件常用屬性 以下屬性繼承自childwindow dialogresult 獲取或者設定乙個值用來顯示子窗體的反饋內容是否被接受或是取消。hasclosebutton 獲取或者設定乙個值用來顯示子窗體是否包含關閉按鈕。overla...

div中巢狀的多個div使用了浮動後居中的辦法

今天做網頁的時候遇到了標題中的問題,網上查到了解決辦法,記錄一下一放以後忘記 1 div class wai 2 div style float left div 3 div style float left div 4 div style float left div 5div 上面的外邊的div...

div中巢狀的多個div使用了浮動後居中的辦法

今天做網頁的時候遇到了標題中的問題,網上查到了解決辦法,記錄一下一放以後忘記 1 div class wai 2 div style float left div 3 div style float left div 4 div style float left div 5div 上面的外邊的div...