C# Windows Phone 8 在程式碼中存取Xaml中的DataTemplate使用,即時改變ListBox的樣式。

  • 1425
  • 0
  • C#
  • 2015-06-09

一般我們在撰寫Windows phone App 或 Windows Store App 時,會使用到DataTemplate來幫助ListBox或其他控制向使用,但是在Xaml中我們可以很快速地讓ListBox存取DataTemplate,那在程式碼中呢?!這個就比較少人知道了,若想要ListBox使用的DataTemplate改變時,我們可以在Xaml中定義多個DataTemplate,並使用程式碼去控制ListBox改變DataTemplate。

本篇文章將引導您在程式碼中存取Xaml中的DataTemplate使用。

一般我們在撰寫Windows phone App 或 Windows Store App 時,會使用到DataTemplate來幫助ListBox或其他控制向使用,但是在Xaml中我們可以很快速地讓ListBox存取DataTemplate,那在程式碼中呢?!這個就比較少人知道了,若想要ListBox使用的DataTemplate改變時,我們可以在Xaml中定義多個DataTemplate,並使用程式碼去控制ListBox改變DataTemplate。

 

本篇文章將引導您在程式碼中存取Xaml中的DataTemplate使用。

 

本篇文章將以ListBox做範例,在C#程式碼中套用Xaml中定義的DataTemplate。

 

一般我們在撰寫Xaml時,會很直覺的將DataTemplate放在ListBox底下。

Xaml :

   1:  <ListBox>
   2:      <ListBox.ItemTemplate>
   3:          <DataTemplate>
   4:              <Grid>
   5:                 .....
   6:              </Grid>
   7:          </DataTemplate>
   8:      </ListBox.ItemTemplate>
   9:  </ListBox>

 

除此之外我們也可以將DataTemplate放在<phone:PhoneApplicationPage.Resources>中,並將ListBox的ItemTemplate屬性指項在Resources所定義的x:key。

Xaml :

   1:  <phone:PhoneApplicationPage.Resources>
   2:      <DataTemplate x:Key="DataTemplate1">
   3:          <Grid>
   4:                  .....
   5:          </Grid>
   6:      </DataTemplate>
   7:  </phone:PhoneApplicationPage.Resources>
   8:   
   9:  <Grid x:Name="LayoutRoot" Background="Transparent">
  10:      <ListBox ItemTemplate="{StaticResource DataTemplate1}"/>
  11:  </Grid>

以上都是常用的方式,但您有試過讓C#存取Xaml中<phone:PhoneApplicationPage.Resources>底下的DataTemplate嗎?!

這可以讓ListBox更活用,我們可以臨時改變ListBox的DataTemplate,讓它馬上換成其他的樣式。

Xaml:

   1:  <phone:PhoneApplicationPage.Resources>
   2:      <DataTemplate x:Key="DataTemplate1">
   3:      ......
   4:      </DataTemplate>
   5:  </phone:PhoneApplicationPage.Resources>
   6:   
   7:  <Grid x:Name="LayoutRoot" Background="Transparent">
   8:      <ListBox x:Name="MyListBox" />
   9:  </Grid>

C# :

   1:  DataTemplate DataTemplate1;
   2:  DataTemplate1= Resources["DataTemplate1"] as DataTemplate;
   3:  MyListBox.ItemTemplate=DataTemplate1;

 

 

如此一來我們便可以在C#中操控ListBox的DataTemplate囉,也可以在C#中存取Xaml中所定義的Resources資源。

 

文章中的敘述如有觀念不正確錯誤的部分,歡迎告知指正 謝謝
轉載請註明出處,並且附上本篇文章網址 !  感謝。

SUKI

HOLIESTAR