簡體   English   中英

從屬性窗口獲取 WPF 控件屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM