2017-06-22 80 views
0

我正在使用WindowsFormsHost控件在我的wpf應用程序中顯示datagridview。WPF Winhost控件不顯示錯誤

<wfi:WindowsFormsHost Name="winhost" Grid.Row="0" Width="930" Height="200" Margin="5,5,5,0" Visibility="Hidden"> 
<wf:DataGridView x:Name="dataGridViewOutlookMailList" ScrollBars="Both" AllowUserToAddRows="False" RowHeadersVisible="False" CellContentClick="dataGridViewOutlookMailList_CellContentClick"> 
    <wf:DataGridView.Columns> 
     <wf:DataGridViewCheckBoxColumn Name="dataGridViewCheckBoxColumn3" HeaderText="" Width="25" Visible="True" /> 
     <wf:DataGridViewTextBoxColumn Name="dataGridViewTextBoxColumn13" HeaderText="Outlook Entry ID" Width="100" Visible="false" /> 
     <wf:DataGridViewTextBoxColumn Name="dataGridViewTextBoxColumn14" HeaderText="FullPath With FileName" Width="100" Visible="False" /> 
     <wf:DataGridViewTextBoxColumn Name="dataGridViewTextBoxColumn15" HeaderText="Resume Name" Width="100" Visible="True" /> 
     <wf:DataGridViewTextBoxColumn Name="dataGridViewTextBoxColumn18" HeaderText="Sender Name" Width="100" Visible="True" /> 
     <wf:DataGridViewTextBoxColumn Name="dataGridViewTextBoxColumn17" HeaderText="Received By Name" Width="100" Visible="True" /> 
     <wf:DataGridViewTextBoxColumn Name="dataGridViewTextBoxColumn16" HeaderText="Received" Width="100" Visible="True" /> 
     <wf:DataGridViewTextBoxColumn Name="dataGridViewTextBoxColumn19" HeaderText="Sender Address" Width="100" Visible="True" /> 
     <wf:DataGridViewTextBoxColumn Name="dataGridViewTextBoxColumn20" HeaderText="To" Width="100" Visible="True" /> 
     <wf:DataGridViewTextBoxColumn Name="dataGridViewTextBoxColumn21" HeaderText="Bcc" Width="100" Visible="True" /> 
     <wf:DataGridViewTextBoxColumn Name="dataGridViewTextBoxColumn22" HeaderText="Cc" Width="100" Visible="True" /> 
     <wf:DataGridViewTextBoxColumn Name="dataGridViewTextBoxColumn23" HeaderText="Subject" Width="100" Visible="True" /> 
     <wf:DataGridViewTextBoxColumn Name="dataGridViewTextBoxColumn24" HeaderText="Body" Width="100" Visible="True" /> 
     <wf:DataGridViewCheckBoxColumn Name="dataGridViewCheckBoxColumn4" HeaderText="NotesActivity" Width="25" Visible="False" /> 
     <wf:DataGridViewCheckBoxColumn Name="dataGridViewCheckBoxColumn5" HeaderText="Body As Attachment" Width="100" Visible="False" /> 
    </wf:DataGridView.Columns> 
</wf:DataGridView> 

我收到以下錯誤,同時鼠標移到DataGridView中也UI加載不正確。詳情請參閱屏幕截圖。

enter image description here

我也使用按照我的Window_Loaded方法來改變的datagridview的字體代碼

WinForms.DataGridViewCellStyle ColStyle1 = new WinForms.DataGridViewCellStyle(); 
System.Drawing.Text.PrivateFontCollection pfc = new System.Drawing.Text.PrivateFontCollection(); 
pfc.AddFontFile(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + @"\NewZrr\OpenSans-Regular.ttf"); 
foreach (WinForms.DataGridViewColumn c in dataGridViewOutlookMailList.Columns) 
{ 
    c.DefaultCellStyle.Font = new System.Drawing.Font(pfc.Families[0], 8, System.Drawing.FontStyle.Regular); 
} 
pfc = null; 

。請引導我解決問題。

+1

你應該考慮改進你的帖子的格式。它幾乎是不可讀的... –

+0

@KumaranT我想告訴你代碼塊和圖像的正確格式。 – kennyzx

+0

@kennyzx:謝謝 –

回答

1

問題是在pfc變量中的PrivateFontCollection實例超出了範圍,所以當第一次繪製DataGridViewCell時,指定的字體無法正確加載。

pfc實例移出Window_Loaded方法,以防止GC收集它,並且不要將其設置爲空,使其成爲長壽命對象。

參考:Parameter is not valid when draw text in label with custom font