WPF WindowsFormsHost控件没有显示错误

时间:2017-06-22 07:41:57

标签: wpf winforms datagridview windowsformshost

我正在使用WindowsFormsHost在我的WPF应用程序中显示DataGridView

<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

我也在使用以下代码

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; 

在我的Window_Loaded方法中更改datagridview的字体。请指导我解决这个问题。

1 个答案:

答案 0 :(得分:1)

问题是PrivateFontCollection变量中的pfc实例超出了范围,所以当第一次绘制DataGridViewCell时,无法正确加载指定的字体。 / p>

pfc实例移到Window_Loaded方法之外以防止GC收集它,并且不要将其设置为null,使其成为长寿命对象。

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