2011-05-09 131 views
6

我發現在listbox的.xaml文件中有一些項目模板,數據模板和綁定。有沒有什麼辦法在後面的代碼中創建它?如何在Windows Phone 7中以編程方式創建ListBox.Itemtemplate,datatemplate

有沒有什麼辦法可以在程序中創建數據模板?

這是XAML代碼,但我需要在後面的代碼使用C#不是在XAML,因爲 我在動態列表框中創建工作與添加itemtemplatem,DataTemplate中

<ListBox Height="520" HorizontalAlignment="Left" Margin="0,6,0,0" Name="lstimge" VerticalAlignment="Top" Width="450" > 
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         <StackPanel Orientation="Horizontal"> 
          <Image Source="{Binding Image}" Width="150" Stretch="Uniform" HorizontalAlignment="Center" /> 
          <TextBlock Text="{Binding FileName}" TextWrapping="Wrap" /> 
         </StackPanel> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 

請給予解決

感謝, 阿肖克

+0

也許你可以詳細說明你爲什麼希望這樣做?一般來說,MVVM的概念是能夠在沒有任何代碼的情況下定義你的視圖。 – RedDeckWins 2011-05-09 07:12:20

+0

請看上面編輯的問題標記 – Ash 2011-05-09 08:52:07

+0

+1這個很好的問題。我完全無法理解爲什麼MS對於寫得很好,速度快,強類型的代碼有很好的IDE支持,並且強迫我們使用某種設計模式,在鎖定的沙箱中玩,遵守他們的風格指南,現在還騷擾我們有這些臃腫和不靈活的XML文件。 – UnclePaul 2012-07-20 16:05:13

回答

5

不能建立從代碼模板 - 這隻能從XAML完成。

如果您在代碼中動態生成了模板XAML,則可以按照here中所述加載它。

我懷疑你會發現自己打開一整罐的蠕蟲,如果你走這條路。作爲替代方案,你可以預先定義一組模板,並選擇在運行時動態正確的,所描述的here

+0

@ Damian Mehers:在沒有使用數據模板的情況下動態創建列表框(不使用XMAL)的任何其他方式。 – 2011-05-10 10:09:00

+0

var listBox = new ListBox { ItemsSource = Assembly.GetCallingAssembly()。GetTypes() }; LayoutRoot.Children.Add(listBox); – Damian 2011-05-10 10:28:34

5

你可以使用XamlReader.Load動態加載XAML中隱藏代碼,並將其轉換爲一個DataTemplate,後來分配給它到ItemTemplate。 Here就是一個例子。

+0

@ Dennis Delimarsky:在沒有使用數據模板的情況下動態創建列表框(不使用XMAL)的任何其他方式... – 2011-05-10 10:04:11

+0

您可以動態創建列表框本身並將其添加到可視化樹中。對於該模板,您將不得不依賴XAML。 – 2011-05-10 16:18:59

1

DataTemplate是你想要使用相同的所有列表框還是也是動態生成的?如果它們全部相同,那麼你可以將它保存爲Style in your Resources,然後動態創建列表框對象並應用該樣式。

相關問題