当我选择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控件显示的一些属性。
答案 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)