IPropertyPage未显示在选项卡视图中



我正在为Visual Studio实现一个自定义语言服务;项目节点应提供一些独立于配置的属性页(如应用程序、调试、构建事件等),这些属性页显示在选项卡视图中。属性页的注册以某种方式起作用,但它们显示在非模态对话框中,这不是想要的行为。。。

这就是我所做的。。。

我已经创建了实现IPropertyPage接口的PropertyPageBase类(如果需要,我可以提供该实现的更多细节)。。。

[ComVisible(true)]
public abstract class PropertyPageBase : IPropertyPage
{
private Control control;
protected abstract Control CreateControl();
public Control Control
{
get { return this.control ?? (this.control = this.CreateControl()); }
}
...
} 

自定义属性页是从该基类派生的;例如。。。

[ComVisible(true)]
[ClassInterface(ClassInterfaceType.AutoDual)]
[Guid(...)]
public sealed class GeneralPropertyPage : PropertyPageBase
{
protected override Control CreateControl()
{
return new GeneralPropertyPageControl(this);
}
}

我使用MPF(项目托管包框架)来实现项目层次结构的节点类型。因此,有一个ProjectNodeBase类(从MPFProjectNode派生而来),其中我覆盖了GetConfigurationIndependentPropertyPages方法;该实现从附加的属性中获取属性页;所以我不必在我的具体实现中再次重写该方法。。。

public abstract class ProjectNodeBase : ProjectNode
{
protected override Guid[] GetConfigurationIndependentPropertyPages()
{
Type thisType = this.GetType();
IEnumerable<Type> pageTypes = thisType.GetCustomAttributes(typeof(ProvideProjectPropertyPageAttribute), true)
.Cast<ProvideProjectPropertyPageAttribute>()
.Select(x => x.PropertyPageType);
return pageTypes.Select(x => x.GUID)
.ToArray();
}
}

在我的具体项目节点类中,我只是这样声明项目属性页。。。

[ProvideProjectPropertyPageAttribute(PropertyPageType = typeof(GeneralPropertyPage))]
public sealed class CustomProjectNode : ProjectNodeBase 
{
...
}

正如我所写的,当我在项目的上下文菜单(在解决方案资源管理器中)中单击"属性"命令时,会显示属性页,但会显示一个非模式对话框,而不是选项卡视图。所以,问题是,我如何才能将其调整为想要的行为?

问题中显示的IPropertyPage实现运行良好。。。

页面没有显示在选项卡式属性页框架中的原因与CustomProjectNode类(代表我的自定义项目系统的项目节点)有关。我使用Managed Package Framework for Projects的修改版本作为我的项目系统层次结构;所以CCD_ 10是从MPF的CCD_。此类提供SupportsProjectDesigner属性,该属性必须设置为true

[ProvideProjectPropertyPageAttribute(PropertyPageType = typeof(GeneralPropertyPage))]
public sealed class CustomProjectNode : ProjectNodeBase 
{
public CustomProjectNode() : base()
{
this.SupportsProjectDesigner = true;
}
}

相关内容

  • 没有找到相关文章

最新更新