這里來實現一個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;
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

