0

我在 WPF 应用程序中托管了一个旧的 Winforms 控件。控件利用了System.Windows.Forms.ListView内部,而这个 ListView 使用了 Groups 功能。

问题是当由 WPF 托管时,此控件不显示组。当 ListView 由 Winforms 应用程序和 WPF 应用程序托管时,我已经手动比较了它的属性。对于这两个 ListViewsShowGroups属性都是 true。

但是,有一个名为的属性GroupsEnabled,当控件托管在 Winforms 中时它是 true,而当它托管在 WPF 中时它是 false。我在这里找到了定义:

internal bool GroupsEnabled
{ 
    get { 
        return this.ShowGroups && groups != null && groups.Count > 0 && ComctlSupportsVisualStyles && !VirtualMode;
    } 
}

VirtualMode两者都为假,但ComctlSupportsVisualStylesWinforms 托管为真,WPF 应用程序为假。来自同一来源的代码
ComctlSupportsVisualStyles

private bool ComctlSupportsVisualStyles { 
 get {
      if(!listViewState[LISTVIEWSTATE_comctlSupportsVisualStylesTested])  
      {
          listViewState[LISTVIEWSTATE_comctlSupportsVisualStylesTested] = true;
          listViewState[LISTVIEWSTATE_comctlSupportsVisualStyles] = Application.ComCtlSupportsVisualStyles; 
      }
      return listViewState[LISTVIEWSTATE_comctlSupportsVisualStyles]; 
  } 
}

我想我需要以Application.ComCtlSupportsVisualStyles某种方式在我的 WPF 代码中进行设置。
这一定是System.Windows.Forms.Application而不是System.Windows.Application
有什么办法吗?

4

1 回答 1

-1

为您的应用程序启用视觉样式应该可以解决问题:

System.Windows.Forms.Application.EnableVisualStyles();

WinForms ListView 控件不支持组,除非启用视觉样式(从技术上讲,除非使用 ComCtrl32 库的版本 6,它与支持视觉样式所需的版本相同)。

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

于 2017-09-30T13:37:23.027 回答