2017-01-05 67 views
-1

我想要在选择WPF控件时访问属性窗口显示的属性。从属性窗口获取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控件显示的一些属性。

+1

你使用返回一个ToolWindowPane的功能。有了这个对象,你可以做更多 –

+0

但是,如果你想提供更多的源代码会更容易。在当前状态下,代码工作并不容易。 –

+0

@AururM我很乐意发布更多的代码,如果我知道什么是有用的,不幸的是,我只是从[这里]休闲教程(https://msdn.microsoft.com/en-us/library/cc138529.aspx ),它向我展示了如何创建一个自定义工具窗口,但对如何获得对现有工具的引用几乎没有见识。 – trebor

回答

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控件具有相同的功能。

+0

非常感谢您的回答,但不幸的是它并没有帮助,因为它需要更新我们拥有几百个组件的整个组件库,这是我通过创建vs扩展来寻找解决方案的主要原因。 – trebor

+0

这是标准的方法。你不能使用一些家长控制?几百个组件只能有几个祖先。 – Arci

0

能否请您检查How to enumerate all dependency properties of control?

我认为这将有助于你对你在找什么...

问候,

+0

你好,我知道如何枚举控件的依赖项属性,事情是我不想从头开始为WPF创建属性窗口的内容,我只想使用VS扩展从它隐藏元素。 – trebor