2012-10-09 38 views
2

嗨我遇到類似的問題QuestionWPF ElementHost無法繪製雙緩衝啓用

對我來說有什麼不同,我在我的WinForms-MainForm中使用「CreateParams-Method」來強制doublebuffering。代碼,這是(以下如DataGridView draws wrong):

protected override CreateParams CreateParams 
{ 
    get 
    { 
     // Activate double buffering at the form level. All child controls will be double buffered as well. 
     CreateParams cp = base.CreateParams; 
     cp.ExStyle |= 0x02000000; // WS_EX_COMPOSITED 
     return cp; 
    } 
} 

我的問題是,現在,只要這的CreateParams被激活,當有鼠標懸停我的WPF的ElementHost的在一個WinForms,用戶控件的內容只繪製事件。

簡短說明:UserControl「打開」但它是透明的。在我用鼠標移過去之後,例如ComboBoxes被繪製。

只要我註釋掉CreateParams,一切正常(使用WPF-ElementHost)。是否有可能停用/使用WPFElementHost的不同的CreateParams?

+0

你有沒有解決這個問題?我遇到了同樣的問題。 –

+0

@TormodFjeldskår:Nej。我從來沒有找到解決這個問題的方法。我剛剛爲整個應用程序註釋了CreateParams-Section。你是否? – basti

+0

不,不幸的不是。從表單中刪除CreateParams代碼,並將其添加到僅用於不承載WPF控件的屏幕上。 –

回答

0

改變render mode的WPF控件爲我工作:

private void Control_Loaded(object sender, RoutedEventArgs e) 
{ 
    HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource; 
    HwndTarget hwndTarget = hwndSource.CompositionTarget; 
    hwndTarget.RenderMode = RenderMode.SoftwareOnly; 
} 
+0

我不能再現這個了,它已經有一段時間了.. ..因此對不起,不接受你的答案:/ – basti

+1

其實,我後來發現這個答案有一個與圖形驅動程序有關的問題,並會導致整個系統崩潰在某些計算機上http://stackoverflow.com/q/17473857/1102585,對於大多數人來說,它工作正常,但是我測試過的5臺機器中有1臺會因此解決方案而崩潰 –