2014-02-19 50 views
0

這是存儲在資源文件中的我現有的「Xaml字符串」模板。如何將「xaml字符串」模板轉換爲可編譯的xaml /控件

<telerik:GridViewDataColumn 
DataMemberBinding="{Binding <<PropertyName>>}"   
IsReadOnlyBinding="{Binding Is<<PropertyName>>ReadOnly}"> 
    <telerik:GridViewDataColumn.CellEditTemplate> 
     <DataTemplate> 
      <StackPanel > 
       <!--some more markup with similar bindings here--> 
      </StackPanel > 
     </DataTemplate> 
    </telerik:GridViewDataColumn.CellEditTemplate> 
</telerik:GridViewDataColumn> 

在後面的代碼中,我使用XamlReader爲列創建標記,後者將其添加到Grid。

var xamlTemplate = Properties.Resources.GridColumnTemplate.Replace("<<PropertyName>>", "MyProperty"); 
var col = (GridViewDataColumn)XamlReader.Load(xamlTemplate); 
detailsGrid.Columns.Add(col); 

現在,我需要用可編譯的Xaml/Control代替它。 有沒有辦法做到這一點?

我曾想過廣泛使用轉換器並綁定到MyProperty的Context,但這聽起來不是一個好的解決方案。

+0

我相信你可以把這個XAML放到一個控件中,並刪除綁定,然後爲每一列創建一個新的實例並以編程方式添加綁定。雖然這並不是很乾淨,但更簡潔的方法是使這個更獨立,像用戶控件一樣擁有自己的依賴屬性,您可以在內部引用該屬性,然後以聲明方式連接(或以編程方式進行連接,就像您在做的那樣)。 –

+0

謝謝。我已經嘗試創建一個具有依賴項屬性的控件,但不知道如何去即時創建依賴項屬性..例如:我有一個屬性集合:「MyProperty1」,「MyProperty2」.. 我當前的代碼將爲每個綁定生成2列,我如何實現與用戶控件一樣的功能? – bit

+0

您不需要在運行中創建任何依賴屬性 - 基本上,您將從telerik GridViewDataColumn派生出一個新類,然後創建這些類的實例以添加到網格中。我正在考慮將它創建爲一個控件(使用它自己的XAML和代碼隱藏)來保存兩個新的依賴屬性,稱爲DataMember和IsReadOnly,這使得在創建它的實例時可以更容易地進行設置到您的網格,但實際上只是抽象了XAML在控制範圍內的複雜性。 –

回答

0

一種選擇是:

  • 創建一個實例:

    • 通過你的屬性集合派生自己列控制(從Telerik的一種)有自己的依賴屬性
    • 環您的列控制
    • 設置綁定in code
+0

無法從列中創建模板化控件,而是決定從網格中創建一個,並在每個屬性的後面代碼中進行綁定。 – bit