2011-11-10 193 views
0

我有一個名爲類:更改項目的模板

public class CountryTemplateSelector : ContentControl 
    { 
     public DataTemplate TrueTemplate 
     { 
      get; 
      set; 
      } 

     public DataTemplate FalseTemplate 
     { 
      get; 
      set; 
     } 



     public override DataTemplate SelectTemplate(object item, DependencyObject container) 
     { 
      Shopping_Ingredients itemAux = item as Shopping_Ingredients; 
      if (itemAux != null) 
      { 
       if (itemAux.IsMarked == true) 
        return TrueTemplate; 
       else 
        return FalseTemplate; 
      } 

      return base.SelectTemplate(item, container); 
     } 
public virtual DataTemplate SelectTemplate(object item, DependencyObject container) 
     { 
      return null; 
     } 

     protected override void OnContentChanged(object oldContent, object newContent) 
     { 
      base.OnContentChanged(oldContent, newContent); 

      ContentTemplate = SelectTemplate(newContent, this); 
     } 
    } 

和一個DataTemplate在App.xaml中聲明:

<DataTemplate x:Key="SelectorForCheckbox"> 
      <local:CountryTemplateSelector Content="{Binding}"> 
       <local:CountryTemplateSelector.TrueTemplate> 
        <DataTemplate> 

         <StackPanel Orientation="Horizontal" Height="82"> 
          <CheckBox Name="cb1" FontSize="15" IsChecked="{Binding Path=IsMarked, Mode=TwoWay}" Margin="0,4" RenderTransformOrigin="0.485,0.365" VerticalContentAlignment="Bottom" /> 
          <TextBlock Text="{Binding AmountToString}" Margin="15,0,5,0" VerticalAlignment="Center" HorizontalAlignment="Left" FontSize="24"/> 

         </StackPanel> 
        </DataTemplate> 
       </local:CountryTemplateSelector.TrueTemplate> 
       <local:CountryTemplateSelector.FalseTemplate> 
        <DataTemplate> 

         <StackPanel Orientation="Horizontal" Height="82"> 
          <CheckBox Name="cb1" FontSize="15" IsChecked="{Binding Path=IsMarked, Mode=TwoWay}" Margin="0,4" RenderTransformOrigin="0.485,0.365" VerticalContentAlignment="Bottom" /> 
          <TextBlock Text="TEST" Margin="15,0,5,0" VerticalAlignment="Center" HorizontalAlignment="Left" FontSize="24"/> 

         </StackPanel> 
        </DataTemplate> 
       </local:CountryTemplateSelector.FalseTemplate> 
      </local:CountryTemplateSelector> 
     </DataTemplate> 

和LongListSelector:

<toolkit:LongListSelector x:Name="recipe1" Background="Transparent" 
       ItemTemplate="{StaticResource SelectorForCheckbox}" 
        ListHeaderTemplate="{StaticResource citiesListHeader}" 
         ListFooterTemplate="{StaticResource citiesListFooter}" 
        GroupHeaderTemplate="{StaticResource groupHeaderTemplate}" 
        GroupItemTemplate="{StaticResource groupItemTemplate}" > 
        <toolkit:LongListSelector.GroupItemsPanel> 
         <ItemsPanelTemplate> 
          <toolkit:WrapPanel/> 
         </ItemsPanelTemplate> 
        </toolkit:LongListSelector.GroupItemsPanel> 
       </toolkit:LongListSelector> 

LongListSelector啓動ok,模板顯示ok。問題是我希望能夠更改點擊特定項目的模板。我怎麼能這樣做?

回答

0

我們應該能夠在代碼中設置模板。看到這個StackOverflow question。確保所有需要的模板都是App.xaml或特定UserControl中的資源。我的例子是從一個按鈕點擊,但同樣的方法應該適用於其他地方的代碼。我不是100%確定它應該投射到ControlTemplate。它可能會非常符合每個模板。

public void CLick_Method(object sender, RoutedEventArgs e) 
{ 
this.recipe1.ItemTemplate = (ControlTemplate)Resources["SelectorForX"]; 
this.recipe1.ListHeaderTemplate= (ControlTemplate)Resources["NewListHeaderTemplate"]; 
// etc. 
} 
+0

tnx for the response!事情是,我想只改變點擊特定項目的模板! (例如,一旦項目被點擊,我想有一個綠色的背景)。其他項目應具有初始模板分配 – Alex