2017-01-05 166 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