WPF 新一代使用體驗開發實務 範例疑問

6.8 整合:建立可收合、停駐、調整大小的 Visual Studio 式窗格 (Page 177)

該程式在右邊有兩個按鈕,分別是 Toolbox 與 Solution Explorer,如果滑鼠移到該按鈕上方,則會暫時出現對應的視窗;如果滑鼠移開,則視窗自動隱藏

而視窗出現時,右上角會有一個按鈕提供視窗停駐的功能。

目前的問題是:Toolbox 與 Solution Explorer 的視窗位置是固定的,也就是 Toolbox 在左邊、Solution Explorer 在右邊。如果 Solution Explorer 先停駐,則滑鼠移到 Toolbox 上方時,出現的視窗在是 Solution Explorer 左邊,此時如果想將 Toolbox 視窗停駐,將因為中間隔了一個視窗而無法達成。因為滑鼠從按鈕上移開後,尚未到達 Toolbox 的停駐按鈕,視窗就消失了。

目前問題有兩種狀況:
  1. 如果先停駐 "T" 與 "S",然後再取消停駐 "T",此時就會有上述的問題
  2. 如果只停駐 "S",則 "T" 會在按鈕旁邊,可正常操作
Why?

2010/03/25

找到原因了,問題出在 UndockPane() 函式中,當要 Undock Pane1 時,除了 layer0 要移除 column1CloneForLayer0 外,還要檢查 Pane2 的狀態。如果 Pane2 是停駐的,則 layer1 也要移除 column2CloneForLayer1 (也就是跟 DockPane() 函式要對稱)。否則下次使用 Pane1 時,就變成有一個隱藏的 column2CloneForLayer1 存在,所以 Pane1 就被移到 Pane2 的左邊了 (請參考書本第 181 頁,圖 6.34)

留言

這個網誌中的熱門文章

Linux 批次檔的寫法

【分享】如何顯示 Debug Message

[分享] Visual Studio 遠端偵錯