有一个旧的Winforms控件,我托管在WPF应用程序中。 控件利用内部System.Windows.Forms.ListView
,此列表视图使用组功能。
问题是此控件在由 WPF 承载时不显示组。 我已经手动比较了由 Winforms 应用程序和 WPF 应用程序托管的 ListView 的属性。 对于两个列表视图ShowGroups
属性为真。
但是,有一个名为GroupsEnabled
的属性,当控件托管在 Winforms 中时为 true,当控件托管在 WPF 中时为 false。 我在这里找到了定义:
internal bool GroupsEnabled
{
get {
return this.ShowGroups && groups != null && groups.Count > 0 && ComctlSupportsVisualStyles && !VirtualMode;
}
}
VirtualMode
对于两者都为假,但对于Winforms托管ComctlSupportsVisualStyles
为假,对于WPF app.来自同一源的ComctlSupportsVisualStyles
代码为
假:
private bool ComctlSupportsVisualStyles {
get {
if(!listViewState[LISTVIEWSTATE_comctlSupportsVisualStylesTested])
{
listViewState[LISTVIEWSTATE_comctlSupportsVisualStylesTested] = true;
listViewState[LISTVIEWSTATE_comctlSupportsVisualStyles] = Application.ComCtlSupportsVisualStyles;
}
return listViewState[LISTVIEWSTATE_comctlSupportsVisualStyles];
}
}
我想我需要在我的 WPF 代码中以某种方式设置Application.ComCtlSupportsVisualStyles
。
这必须是System.Windows.Forms.Application
的,而不是System.Windows.Application
.
有什么办法吗?
为应用程序启用视觉样式应该可以解决此问题:
System.Windows.Forms.Application.EnableVisualStyles();
WinForms ListView 控件不支持组,除非启用了视觉样式(从技术上讲,除非使用 ComCtrl32 库的版本 6,该版本与支持视觉样式所需的版本相同(。
另请参阅:如何:在混合应用程序中启用视觉样式