C# 从属性窗口获取WPF控件属性

C# 从属性窗口获取WPF控件属性,c#,.net,wpf,visual-studio,vsix,C#,.net,Wpf,Visual Studio,Vsix,我试图在选择WPF控件时访问属性窗口显示的属性 问题是,尽管我已经设法在properties窗口中添加了自己的内容,但我还没有找到一种方法来获取WPF设计器用于显示控件属性的内容的引用 private IVsWindowFrame _frame; ... if(_frame == null) { var shell = parent.GetVsService(typeof(SVsUIShell)) as IVsUIShell; if(shell != null) {

我试图在选择WPF控件时访问属性窗口显示的属性

问题是,尽管我已经设法在properties窗口中添加了自己的内容,但我还没有找到一种方法来获取WPF设计器用于显示控件属性的内容的引用

private IVsWindowFrame _frame;
...

if(_frame == null) {
    var shell = parent.GetVsService(typeof(SVsUIShell)) as IVsUIShell;
    if(shell != null) {
        var guidPropertyBrowser = new Guid(ToolWindowGuids.PropertyBrowser);
        shell.FindToolWindow(
            (uint) __VSFINDTOOLWIN.FTW_fFindFirst, ref guidPropertyBrowser, out _frame
        );
    }
}
正如您所看到的,我已经有了对属性窗口的引用,但不幸的是,我不知道如何获得列出的属性


如果相关,我尝试这样做的原因是因为我想删除(或隐藏)设计器中为WPF控件显示的某些属性。

对WPF控件的设计时支持基于公共属性和属性。控件的任何公共属性都显示在“属性”窗口中,但您可以按属性更改可见性。隐藏现有属性有一个简单的技巧。必须定义具有相同名称的新属性并添加属性。Is属性定义为虚拟,您可以简单地重写,但可以使用关键字new

示例代码:

public partial class MyUserControl : UserControl
{
    public MyUserControl()
    {
        InitializeComponent();
    }

    [System.ComponentModel.Browsable(false)]
    public new Brush Background
    {
        get { return base.Background; }
        set { base.Background = value; }
    }
}
设计时属性和继承

从具有设计时属性的基组件派生组件或控件时,组件将继承基类的设计时功能。如果基本功能适合您的目的,则不必重新应用属性。但是,可以替代相同类型的属性,也可以将其他属性应用于衍生零部件。下面的代码片段显示了一个自定义控件,该控件通过重写基类中应用的BrowsableAttribute属性来重写从控件继承的文本属性

看,你必须使用。基本概念适用于WinFors和WebForms,但WPF控件也有相同的概念。

您能检查一下吗

我想这会帮你找到你想要的


关于,

您正在使用的函数返回一个ToolWindowPane。有了这个对象,你也许可以做更多的事情,但是,如果你能提供更多的源代码,那就更容易了。在当前状态下,让代码正常工作并不容易。@ArthurM如果我知道什么是有用的,我会很乐意发布更多的代码,不幸的是,我只是在学习教程,它向我展示了如何创建自定义工具窗口,但是对于如何获取对现有对象的引用没有什么深入了解。标准方法是使用IVsMonitorSelection:GetCurrentSelection,但当与自定义WPF属性浏览器中显示的对象一起使用时,IVsMultiItemSelect参数将返回null…非常感谢您的回答,但不幸的是,这没有帮助,因为它需要更新我们的整个组件库,它有几百个组件,这是我通过创建vs扩展来寻找解决方案的主要原因。这是标准方法。您不能使用某些父控件吗?几百个组件可能只有很少的祖先。您好,我知道如何枚举控件的依赖属性,问题是我不想从头开始为WPF创建属性窗口的内容,我只想使用VS扩展对其隐藏元素。