单击后更改项目的模板

时间:2011-11-10 13:50:05

标签: silverlight windows-phone-7

我有一个名为:

的班级
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);
        }
    }

和在App.xaml中声明的DataTemplate:

 <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启动正常,模板显示正常。问题是我希望能够更改单击的特定项目的模板。我怎么能这样做?

1 个答案:

答案 0 :(得分: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.
}