簡體   English   中英

以編程方式從模板創建元素

[英]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
  • 可用作XAML資源的控件模板

您已經知道如何創建類的實例以及如何將其添加到“ Children列表中。

其他SO問題中還討論了如何從XAML資源中檢索控制模板(或其他任何對象)的方法,例如:

這導致:

ControlTemplate template = (ControlTemplate)this.FindResource("templateX");

現在,關鍵的一點是,你不想控制模板本身添加到Children名單。 控件模板只是一組說明,說明如何為控件創建UI樹並將控件的屬性綁定到控件的屬性(如果適用)。

而是要配置new_instance以使用從資源中檢索到的控制模板。 您可以通過將控件模板分配給new_instanceTemplate屬性 new_instance

new_instance.Template = template;

new_instance添加到Children ,它將顯示出來,並將使用您的自定義控件模板。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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