zoukankan      html  css  js  c++  java
  • WP7 Toolkit ExpanderView 控件 介绍 02

    这里来实现一个ListBox里面点击某项后 展示出它的选中项更多的数据

    这时使用ExpanderView 来实现会非常简单

    clip_image002[10]clip_image008

    首先写实体类:

        public class CustomPizza : INotifyPropertyChanged 
    {
    private bool isExpanded;
    public string Image { get; set; }
    public string Name { get; set; }
    public DateTime DateAdded { get; set; }
    public IList<PizzaOption> Options { get; set; }
    public bool HasNoOptions
    {
    get { return this.Options == null || this.Options.Count == 0; }
    }
    public bool IsExpanded
    {
    get { return this.isExpanded; }
    set
    {
    if (this.isExpanded != value)
    {
    this.isExpanded = value;
    this.OnPropertyChanged("IsExpanded");
    }
    }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string propertyName)
    {
    PropertyChangedEventHandler handler
    = this.PropertyChanged;
    if (handler != null)
    {
    handler(
    this, new PropertyChangedEventArgs(propertyName));
    }
    }
    }

    public class PizzaOption
    {
    public string Name { get; set; }
    }

    创建Images文件夹并放入4张图片

    clip_image004

    写入数据

    public MainPage() 
    {
    List
    <CustomPizza> customPizzas = new List<CustomPizza>()
    {
    new CustomPizza()
    {
    Name
    = "Custom Pizza 1",
    DateAdded
    = new DateTime(2010, 7, 8),
    Image
    ="Images/pizza1.png",
    Options
    = new List<PizzaOption>
    {
    new PizzaOption() { Name = "Ham" },
    new PizzaOption() { Name = "Mushrooms" },
    new PizzaOption() { Name = "Tomatoes" }
    }
    },
    new CustomPizza()
    {
    Name
    = "Custom Pizza 2",
    DateAdded
    = new DateTime(2011, 2, 10),
    Image
    ="Images/pizza2.png",
    Options
    = new List<PizzaOption>
    {
    new PizzaOption() { Name = "Ham" },
    new PizzaOption() { Name = "Olives" },
    new PizzaOption() { Name = "Mozzarella" }
    }
    },
    new CustomPizza()
    {
    Name
    = "Surprise Pizza",
    Image
    = null,
    DateAdded
    = new DateTime(2011, 4, 1),
    Options
    = null
    },
    new CustomPizza()
    {
    Name
    = "Custom Pizza 3",
    Image
    ="Images/pizza3.png",
    DateAdded
    = new DateTime(2011, 5, 15),
    Options
    = new List<PizzaOption>
    {
    new PizzaOption() { Name = "Salami" },
    new PizzaOption() { Name = "Mushrooms" },
    new PizzaOption() { Name = "Onions" } }
    },
    new CustomPizza()
    {
    Name
    = "Custom Pizza 4",
    Image
    ="Images/pizza4.png",
    DateAdded
    = new DateTime(2011, 7, 20),
    Options
    = new List<PizzaOption>
    {
    new PizzaOption() { Name = "Pepperoni" },
    new PizzaOption() { Name = "Olives" },
    new PizzaOption() { Name = "Mozzarella" }
    }
    },
    };
    //...
    }

    下面写前端页面,及数据跟UI的绑定

    前面页面数据转换器:(比如08/08/2011年,我们即可以自动转换成文字"一个月以前")

    <phone:PhoneApplicationPage.Resources> 
        <toolkit:RelativeTimeConverter x:Key="RelativeTimeConverter"/> 
    </phone:PhoneApplicationPage.Resources> 

    头部模板:

    <phone:PhoneApplicationPage.Resources>
         <DataTemplate x:Key="CustomHeaderTemplate">  
               <TextBlock Text="{Binding Name}" FontSize="{StaticResource PhoneFontSizeExtraLarge}" FontFamily="{StaticResource PhoneFontFamilySemiLight}"/>   
      </DataTemplate> 
    </phone:PhoneApplicationPage.Resources> 

    下拉扩展列表模板

    <phone:PhoneApplicationPage.Resources>   
     <DataTemplate x:Key="CustomExpanderTemplate">   
      <StackPanel Orientation="Horizontal">        
    <Image Source="{Binding Image}" Stretch="None"/>   
         <TextBlock Foreground="{StaticResource PhoneSubtleBrush}"   FontSize="{StaticResource PhoneFontSizeNormal}" VerticalAlignment="Center"> 
            <TextBlock.Text> 
                <Binding Path="DateAdded" Converter="{StaticResource RelativeTimeConverter}" StringFormat="Date added: {0}" />   
          </TextBlock.Text>  
         </TextBlock>   
      </StackPanel>  
      </DataTemplate>
     </phone:PhoneApplicationPage.Resources> 

    每ListBox的Item 模板

    <phone:PhoneApplicationPage.Resources>    
        <DataTemplate x:Key="CustomItemTemplate">  
               <TextBlock Text="{Binding Name}" /> 
        </DataTemplate> 
    </phone:PhoneApplicationPage.Resources> 

    有没下拉列表时显示的模板

    <phone:PhoneApplicationPage.Resources> 
       <DataTemplate x:Key="CustomNonExpandableHeaderTemplate"> 
        <StackPanel Orientation="Vertical"> 
           <TextBlock Text="{Binding Name}" FontSize="{StaticResource PhoneFontSizeExtraLarge}" FontFamily="{StaticResource PhoneFontFamilySemiLight}"/>   
         <TextBlock Foreground="{StaticResource PhoneSubtleBrush}" FontSize="{StaticResource PhoneFontSizeNormal}">      
               <TextBlock.Text> 
                         <Binding Path="DateAdded" Converter="{StaticResource RelativeTimeConverter}" StringFormat="Date added: {0}" />    
           </TextBlock.Text>      
      </TextBlock>          
     <TextBlock Text="The ingredients will be a surpise!"  Foreground="{StaticResource PhoneSubtleBrush}"FontSize="{StaticResource PhoneFontSizeNormal}" />   
      </StackPanel>   
     </DataTemplate> 
    </phone:PhoneApplicationPage.Resources> 

    这时添加一个ListBox

    <ListBox Grid.Row="0" x:Name="listBox">
        <ListBox.ItemContainerStyle>
         <Style TargetType="ListBoxItem">
             <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
         </Style> 
        </ListBox.ItemContainerStyle>
         <ListBox.ItemsPanel>
             <ItemsPanelTemplate>
                 <StackPanel/>
             </ItemsPanelTemplate>
         </ListBox.ItemsPanel>
         <ListBox.ItemTemplate> 
            <DataTemplate>
                 <toolkit:ExpanderView Header="{Binding}"   Expander="{Binding}" ItemsSource="{Binding Options}" NonExpandableHeader="{Binding}"IsNonExpandable="{Binding HasNoOptions}"  IsExpanded="{Binding IsExpanded, Mode=TwoWay}"HeaderTemplate="{StaticResource CustomHeaderTemplate}" ExpanderTemplate="{StaticResource CustomExpanderTemplate}"ItemTemplate="{StaticResource CustomItemTemplate}"NonExpandableHeaderTemplate="{StaticResource CustomNonExpandableHeaderTemplate}"/>
             </DataTemplate> 
        </ListBox.ItemTemplate>
     </ListBox>  

    最后设置ListBox的ItemSource :this.listBox.ItemsSource = customPizzas;

  • 相关阅读:
    多线程
    关于并发和并行
    文件系统
    java.util.Arrays类
    程序管理与SElinux
    用户和用户组管理总结
    useradd和adduser
    打印可见字符
    cmd中控制某个命令执行多少次
    keras模块之-优化器(optimizers)--笔记
  • 原文地址:https://www.cnblogs.com/holyenzou/p/2175014.html
Copyright © 2011-2022 走看看