[英]How do you create an element programmatically from a data template defined in XAML?
[英]Create an element from template programmatically
我想將一個元素從一個網格移動到另一個網格,並遇到了以編程方式將模板分配給新實例的問題。 此外,我嘗試的細節。
為此,我從該模板創建類的實例及其外觀。
在Window標記內,我聲明了名稱空間:
xlmns:my="clr-namespace:myNameSpace"
我在資源中有一個模板:
<ControlTemplate x:Key="templateX">
<StackPanel>
<Image Source="pic.png" Width="50" Height="50"/>
</StackPanel>
</ControlTemplate>
並將元素放入網格中。
<Grid Grid.Row="2">
<StackPanel>
<my:someClass Template="{StaticResource templateX}" MouseMove="_event">
</StackPanel>
</Grid>
現在,我拖動該元素,將觸發事件“ _event”。 如果我通過它推動一個標准元素(例如Rectangle),則在事件拖放鏈的末尾執行以下操作:
Rectangle new_instance = new Rectangle();
// place for rectangle's form and color
NewPlace.Children.Add(new_instance);
// place for positioning the rectangle in NewPlace canvas
我該如何使用someClass的元素做最后一部分? 如果我做
someClass new_instance = new someClass();
NewPlace.Children.Add(new_instance);
模板“ templateX”未分配給它。
在這種情況下,問題似乎在於您想結合兩件事:
new_instance
) 您已經知道如何創建類的實例以及如何將其添加到“ Children
列表中。
其他SO問題中還討論了如何從XAML資源中檢索控制模板(或其他任何對象)的方法,例如:
這導致:
ControlTemplate template = (ControlTemplate)this.FindResource("templateX");
現在,關鍵的一點是,你不想控制模板本身添加到Children
名單。 控件模板只是一組說明,說明如何為控件創建UI樹並將控件的屬性綁定到控件的屬性(如果適用)。
而是要配置new_instance
以使用從資源中檢索到的控制模板。 您可以通過將控件模板分配給new_instance
的Template
屬性 new_instance
:
new_instance.Template = template;
將new_instance
添加到Children
,它將顯示出來,並將使用您的自定義控件模板。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.