2017-06-22 79 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