在 WPF 承载的列表视图中启用组



有一个旧的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,该版本与支持视觉样式所需的版本相同(。

另请参阅:如何:在混合应用程序中启用视觉样式

相关内容

  • 没有找到相关文章

最新更新