ComboBox, ListBox, FlipView, ItemsContr
介紹
重新想象 Windows 8 Store Apps 之集合控件
ComboBox - 下拉框
ListBox - 列表框
FlipView - 滑動視圖控件
ItemsControl ItemsPresenter - ItemsPresenter 用來呈現 ItemsControl 的 Items
示例
1、ComboBox 的 Demo
ComboBoxDemo.xaml
<Page
x:Class="XamlDemo.Controls.ComboBoxDemo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:XamlDemo.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="Transparent">
<StackPanel Margin="120 0 0 0">
<!--ComboBox - 下拉框-->
<!--xaml 方式為 ComboBox 添加數據-->
<ComboBox x:Name="comboBox" Width="200" Margin="5" HorizontalAlignment="Left">
<ComboBoxItem Content="ComboBoxItem1" />
<ComboBoxItem Content="ComboBoxItem2" />
<ComboBoxItem Content="ComboBoxItem3" />
</ComboBox>
<!--
後台綁定方式為 ComboBox 添加數據
DisplayMemberPath - 指定數據源中需要被顯示出來的字段名稱
MaxDropDownHeight - 用於指定打開後的下拉框的最大高度
-->
<ComboBox x:Name="comboBoxWithBinding" DisplayMemberPath="Name" MaxDropDownHeight="100" Width="200" Margin="5" HorizontalAlignment="Left" />
<!--通過模板設置 ComboBox 的每一項的布局和數據-->
<ComboBox ItemsSource="{Binding ItemsSource, ElementName=comboBoxWithBinding}" MaxDropDownHeight="100" Width="200" Margin="5" HorizontalAlignment="Left">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}" />
<TextBlock Text="{Binding Age}" Margin="5 0 0 0" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
</Grid>
</Page>
ComboBoxDemo.xaml.cs
/*
* ComboBox - 下拉框
* IsDropDownOpen - 下拉框是否處於打開狀態
* MaxDropDownHeight - 打開後的下拉框的最大高度
* DropDownOpened - 下拉框打開時觸發的事件
* DropDownClosed - 下拉框關閉時觸發的事件
*/
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
using XamlDemo.Model;
namespace XamlDemo.Controls
{
public sealed partial class ComboBoxDemo : Page
{
public ComboBoxDemo()
{
this.InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
// 綁定數據到 ComboBox
var data = TestData.GetEmployees();
comboBoxWithBinding.ItemsSource = data;
}
}
}
2、ListBox 的 Demo
ListBoxDemo.xaml
<Page
x:Class="XamlDemo.Controls.ListBoxDemo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:XamlDemo.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="Transparent">
<StackPanel Margin="120 0 0 0" Orientation="Horizontal">
<!--ListBox - 列表框-->
<!--xaml 方式為 ListBox 添加數據-->
<ListBox x:Name="listBox" Width="200" Height="300" Margin="5" HorizontalAlignment="Left" VerticalAlignment="Top">
<ListBox.Items>
<ListBoxItem Content="ListBoxItem1" />
<ListBoxItem Content="ListBoxItem2" />
<ListBoxItem Content="ListBoxItem3" />
</ListBox.Items>
</ListBox>
<!--
後台綁定方式為 ListBox 添加數據
DisplayMemberPath - 指定數據源中需要被顯示出來的字段名稱
-->
<ListBox x:Name="listBoxWithBinding" SelectionMode="Multiple" DisplayMemberPath="Name" Width="200" Height="300" Margin="5" HorizontalAlignment="Left"
VerticalAlignment="Top" />
<!--通過模板設置 ListBox 的每一項的布局和數據-->
<ListBox ItemsSource="{Binding ItemsSource, ElementName=listBoxWithBinding}"
SelectionMode="Multiple" Width="200" Height="300" Margin="5" HorizontalAlignment="Left"
VerticalAlignment="Top">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}" />
<TextBlock Text="{Binding Age}" Margin="5 0 0 0" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<!--
VirtualizingStackPanel - 虛擬化的 StackPanel(即僅生成需要顯示的 UI
元素。當綁定了大量數據,而某時僅顯示其中一小部分的時候,使用此控件則可大幅提高呈現效率)
Orientation - 數據的排列方式(垂直排列或水平排列,也就是說
ListBox 也可以水平排列)
VirtualizationMode - 虛擬化的模式
Recycling - item 的容器會被重用,默認值
Standard - 每個 item 都有自己獨立的容器
注:ListBox 默認已經使用了 VirtualizingStackPanel,但是其對於變高的
DataTemplate 來說支持得不好
-->
<VirtualizingStackPanel Orientation="Vertical"
VirtualizingStackPanel.VirtualizationMode="Recycling" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
</StackPanel>
</Grid>
</Page>
ListBoxDemo.xaml.cs
/*
* ListBox - 列表框
* SelectionMode - 選擇的模式(Single - 單選;Multiple - 僅通過鼠標多選;Extended - 通過鼠標
和輔助鍵多選)
* ScrollIntoView(object item) - 滾動到指定 item
* SelectAll() - 選中所有項
*/
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
using XamlDemo.Model;
namespace XamlDemo.Controls
{
public sealed partial class ListBoxDemo : Page
{
public ListBoxDemo()
{
this.InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
// 綁定數據到 ListBox
var data = TestData.GetEmployees();
listBoxWithBinding.ItemsSource = data;
}
}
}
3、FlipView 的 Demo
FlipViewDemo.xaml
<Page
x:Class="XamlDemo.Controls.FlipViewDemo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:XamlDemo.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="Transparent">
<StackPanel Margin="120 0 0 0">
<!--FlipView - 滑動視圖控件-->
<!--在 XAML 中通過 FlipViewItem 指定 FilpView 的每一項-->
<FlipView Width="320" Height="240" HorizontalAlignment="Left" Background="Black">
<FlipView.Items>
<FlipViewItem>
<TextBlock FontSize="26.667" Text="I am webabcd" />
</FlipViewItem>
<FlipViewItem>
<Image Source="/Assets/Logo.png" Stretch="Fill" />
</FlipViewItem>
</FlipView.Items>
</FlipView>
<!--通過後台綁定的方式將數據綁定到 FlipView-->
<FlipView Name="flipView" Width="320" Height="240" Background="Yellow" HorizontalAlignment="Left" Margin="0 10 0 0">
<FlipView.ItemContainerStyle>
<Style TargetType="FlipViewItem">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
</Style>
</FlipView.ItemContainerStyle>
<!--上下翻頁-->
<FlipView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</FlipView.ItemsPanel>
<FlipView.ItemTemplate>
<DataTemplate>
<Grid Background="Black">
<TextBlock Text="{Binding Name}" FontSize="26.667" />
<TextBlock Text="{Binding Age}" FontSize="26.667" Margin="0 40 0 0" />
</Grid>
</DataTemplate>
</FlipView.ItemTemplate>
</FlipView>
</StackPanel>
</Grid>
</Page>
FlipViewDemo.xaml.cs
/*
* FlipView - 滑動視圖控件
*/
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
using XamlDemo.Model;
namespace XamlDemo.Controls
{
public sealed partial class FlipViewDemo : Page
{
public FlipViewDemo()
{
this.InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
// 綁定數據到 FlipView
var employees = TestData.GetEmployees();
flipView.ItemsSource = employees;
}
}
}
4、ItemsControl, ItemsPresenter 的 Demo
ItemsControlDemo.xaml
<Page
x:Class="XamlDemo.Controls.ItemsPresenterDemo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:XamlDemo.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="Transparent">
<StackPanel Margin="120 0 0 0">
<!--
演示 ItemsControl 和 ItemsPresenter 的應用(ItemsPresenter 用來呈現 ItemsControl 的 Items)
ListBox, ComboBox, FlipView, GridView, ListView 等均間接地繼承了 ItemsControl
-->
<ItemsControl HorizontalAlignment="Left">
<ItemsControl.Items>
<Rectangle Width="100" Height="100" Fill="Red" />
<Rectangle Width="100" Height="100" Fill="Green" />
<Rectangle Width="100" Height="100" Fill="Blue" />
</ItemsControl.Items>
<ItemsControl.Template>
<ControlTemplate>
<Border BorderBrush="Orange" BorderThickness="1" Width="400" Height="400">
<!--
通過 ItemsPresenter 來呈現 ItemsControl 的 Items(注:其呈現的是 Items 而不是 Item)
-->
<ItemsPresenter Margin="10" VerticalAlignment="Center" HorizontalAlignment="Center" />
</Border>
</ControlTemplate>
</ItemsControl.Template>
</ItemsControl>
</StackPanel>
</Grid>
</Page>
OK
[源碼下載]:http://files.cnblogs.com/webabcd/Windows8.rar