[英]Get WPF control properties from the Properties Window
選擇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 控件顯示的一些屬性。
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 控件具有相同的概念。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.