这里来实现一个ListBox里面点击某项后 展示出它的选中项更多的数据
这时使用ExpanderView 来实现会非常简单
首先写实体类:
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张图片
写入数据
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;

