2011-09-19 80 views
3

我在使用WPF託管的Windows窗體控件時遇到了相當大的問題。例如,當用戶滾動窗口時,託管控件會在窗口頂部,儘管它應該被隱藏。當另一個控件與它重疊時隱藏控件

我知道這是已知的問題,託管控件的默認行爲,但我認爲可以解決,如果控制的可見性以某種方式綁定:是否其他控件重疊或不重疊。如果其他控件重疊,則應該變爲摺疊或隱藏,如果不是,則應該是可見的。

我爲此做了某種解決方案,但是我在ScrollViewer的ScrollChanged事件上做了它,它只在特殊情況下才起作用。如果有人知道如何通過綁定來實現這一點,那麼它可以應用於任何託管控件,請分享您的想法。

回答

1

對於這個同樣的問題,我們實施了一些好奇......

Windows窗體的宿主是Z順序不受影響所以滾動瀏覽器將無法隱藏部分/剪輯它其中的ScrollViewer下是可視的區域。

因此,我們有兩個選擇......

  1. 使用Windows窗體主機到主機的WPF UI在裏面休息,這意味着我們扭轉UI的所有權。 WindowsFormsHost必須託管其中的所有UI,並具有基於WinForms的滾動查看器,而後者將託管WPF UI。

  2. 實現一個滾動的窗口的計算高度偏移形成的宿主,當用戶滾動增加這個偏移量到ScrollViewer中的地位和隱藏windforms舉辦自己(Visibility = HiddenCollapsed)。這樣,它會產生一個效果,即不能部分滾動winforms主機,但會將其從卷軸查看器中完全滾動。並且由於winformshost是Hidden(未摺疊),它將繼續佔用滾動查看器下不可見區域內的高度(從而保持其滾動位置)。

讓我知道這是否指導你正確的方向。

+0

謝謝你的回答。第一種方法對我來說太複雜了,因爲我們有太多的觀點需要改變。我嘗試了第二種選擇,但我對結果並不滿意。我認爲你的解決方案更好。你能給我一些帶有代碼的指南,或者至少是僞代碼嗎?它會爲我節省很多時間。 – Vale