从“属性”窗口获取WPF控件属性

时间:2017-01-05 17:34:35

标签: c# .net wpf visual-studio vsix

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

问题在于虽然我已经设法在属性窗口中添加我自己的内容,但我还没有找到一种方法来获取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控件显示的一些属性。

2 个答案:

答案 0 :(得分:1)

WPF控件的设计时支持基于公共属性和属性。控件的任何公共属性都显示在属性窗口中,但您可以按属性更改可见性。隐藏现有属性有一个简单的技巧。您必须使用相同的名称定义新属性并添加属性。属性是否定义为虚拟,您可以简单地覆盖,但您可以使用关键字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属性来覆盖从Control继承的Text属性。

请参阅MSDN,您必须使用BrowsableAttribute。基本概念适用于WinFors和WebForms,但WPF控件具有相同的功能。

答案 1 :(得分:0)

请查看How to enumerate all dependency properties of control?

我认为这会帮助你找到你想要的东西......

此致