2012-08-27 21 views
0

XAML:如何將內容控件附加到列表框?

<ListBox> 
    <ListBox.ItemTemplate> 
     <DataTemplate > 
      <StackPanel > 
       <Grid Width="335" > 
        <TextBlock Text="{Binding Body}" /> 
       </Grid> 
      </StackPanel> 
     </DataTemplate> 
     <DataTemplate > 
      <StackPanel > 
       <Grid Width="335" > 
        <Image Source="{Binding Image}" /> 
       </Grid> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

CS:

public class GardenConverter : ContentControl 
{ 
    public DataTemplate TextTemplate { get; set; } 
    public DataTemplate ImageTemplate { get; set; } 

    protected override void OnContentChanged(object oldContent, object newContent) 
    { 
     base.OnContentChanged(oldContent, newContent); 
     // apply the required template 

     GardenObject garden = newContent as GardenObject; 
     if (garden.image == "0") 
     { 
      ContentTemplate = TextTemplate; 
     } 
     else 
     { 
      ContentTemplate = ImageTemplate; 
     } 
    } 
} 

回答

1

你可以嘗試一個數據模板選擇。

public class GardenTemplateSelector : DataTemplateSelector 
{ 
    public override DataTemplate SelectTemplate(object item, DependencyObject container) 
    { 
     var element = container as FrameworkElement; 
     if (element != null && item != null && item is GardenObject) 
     { 
      if((item as GardenObject).image == "0") 
      { 
       return element.FindResource("TextTemplate") as DataTemplate;    
      } 
      else 
      { 
       return element.FindResource("ItemTemplate") as DataTemplate;    
      }   
     } 

     return null; 
    } 
} 

在XAML中,您需要定義TextTemplate和ItemTemplate。

欲瞭解更多信息,請參閱http://msdn.microsoft.com/en-us/library/system.windows.controls.datatemplateselector.aspx

+0

謝謝你,你讓我正確的方式來回答http://www.windowsphonegeek.com/articles/Implementing-Windows-Phone-7-DataTemplateSelector-and-CustomDataTemplateSelector – Newred