Silverlight toolkit 中ListPicker控件的用法

 ListPicker控件,从外形上看有点像ComboBox,主要的功能也是可以在多个项目中来选择一个项目,如下图,在平常状态下,看到的是跟一般的文字框相同(如图1),而展开后就会出现项目列表(如图2)。

                      图1 ListPicker控件显示                                                                                 图2 ListPicker控件展开时

下面我们来看一下这个例子的具体实现。步骤很简单,首先,需要将ListPicker控件添加到MainPage中去。设置ListPicker的属性:

<toolkit:ListPicker Header="Default" Height="229" Name="defaultPicker" Width="414" />

从上边的代码可以看到,Header在控件中的显示位置。

在MainPage.xaml.cs文件中添加代码:

this.defaultPicker.ItemsSource = new List<String>() { "London", "China", "Mexico" };

这里添加的就是要填充到ListPicker中的内容。

这两步完成之后,运行后的效果就如图上所示。

关于第二步代码的添加,还有另外的两种方法:

1. 使用ListPicker.Items.Add方法

            this.defaultPicker.Items.Add("London");

            this.defaultPicker.Items.Add("China");

            this.defaultPicker.Items.Add("Mexico");

2. 将这部分的实现放在MainPage.xaml中去

xmlns:sys="clr-namespace:System;assembly=mscorlib"

 

<toolkit:ListPicker Header="Default" Height="229" Name="defaultPicker" Width="414">

                <sys:String>London</sys:String>

                <sys:String>China</sys:String>

                <sys:String>Mexico</sys:String>

            </toolkit:ListPicker> 

这里需要注意的是,在放置ListPicker控件时,需要将下方拉大些,留下足够的空间来显示列表中的内容,否则list中内容无法显示或显示不全。

当展开的ListPicker中项目的数量超过5个时,ListPicker会自动地以整页的模式来显示待选的项目,这样可以有更多的显示空间,在项目的选择上也会更加的方便。

下面我们来实现一个颜色选择的ListPicker。List的显示,除了文字外,前边加上对应的颜色矩形框。

首先,添加ListPicker控件到界面,设置FullModeItemTemplate,ItemTemplate属性。

<toolkit:ListPicker Header="Full ListPicker" Height="217" Name="listPicker1" Width="410" ItemsSource="{Binding}">

                <toolkit:ListPicker.FullModeItemTemplate>

                    <DataTemplate>

                        <StackPanel Orientation="Horizontal">

                            <Rectangle Fill="{Binding}" Width="40" Height="40" Margin="10, 10, 10, 10"/>

                            <TextBlock Text="{Binding}" VerticalAlignment="Center"/>

                        </StackPanel>

                    </DataTemplate>

                </toolkit:ListPicker.FullModeItemTemplate>

                <toolkit:ListPicker.ItemTemplate>

                    <DataTemplate>

                        <StackPanel Orientation="Horizontal">

                            <Rectangle Fill="{Binding}" Width="40" Height="40" Margin="10, 10, 10, 10"/>

                            <TextBlock Text="{Binding}" VerticalAlignment="Center"/>

                        </StackPanel>

                    </DataTemplate>

                </toolkit:ListPicker.ItemTemplate>

            </toolkit:ListPicker>

其次,建立一个表示颜色的字符串数组:

static readonly string[] AccentColors = { "magenta", "purple", "teal", "lime", "brown", "pink", "orange", "blue", "red", "green" };

this.listPicker1.DataContext = AccentColors;

这样,运行程序,效果如下图:

 

这里默认的超过5项时全屏的模式,有一个属性ItemCountThreshold,设置它的值可以改变这个规则,当ItemCountThreshold="2"时,list中的内容超过2个时,就会以全屏模式显示。

 

SelectedIndex,用来规定当前显示的为所选择List中的第几个,从0开始。

 

其它更为详细的属性和事件,请参考:

http://www.windowsphonegeek.com/articles/listpicker-for-wp7-in-depth

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
WPF Toolkit的 CheckComboBox 控件并没有内置搜索功能,但是我们可以通过一些方法来实现该功能。 第一种方法是使用 ICollectionView 接口,该接口提供了排序、筛选和分组的功能。我们可以在 CheckComboBox 的 Text 属性绑定使用 ICollectionView 进行筛选,从而实现搜索的功能。 以下是一个示例代码: ```xml <tk:CheckComboBox x:Name="checkComboBox" DisplayMemberPath="Name"> <tk:CheckComboBox.ItemsSource> <CompositeCollection> <CollectionContainer Collection="{Binding Items}" /> <ComboBoxItem IsEnabled="False"> <TextBox x:Name="searchBox" Text="Search" Foreground="Gray" /> </ComboBoxItem> </CompositeCollection> </tk:CheckComboBox.ItemsSource> </tk:CheckComboBox> ``` ```csharp ICollectionView view = CollectionViewSource.GetDefaultView(checkComboBox.Items); view.Filter = item => ((Item)item).Name.Contains(searchBox.Text); ``` 以上代码,我们在 CheckComboBox 的 ItemsSource 添加了一个 TextBox 控件,用于输入搜索关键字。然后,我们获取 CheckComboBox 的 ItemsSource 的默认视图,并设置视图的 Filter 属性为一个 lambda 表达式,该表达式用于判断项是否包含搜索关键字。 第二种方法是继承 CheckComboBox 控件,并添加搜索功能。我们可以在 CheckComboBox 控件的 Text 属性的 PropertyChanged 事件添加搜索逻辑。 以下是一个示例代码: ```csharp public class CheckComboBoxWithSearch : CheckComboBox { private string searchText; public string SearchText { get { return searchText; } set { if (searchText != value) { searchText = value; OnPropertyChanged(new PropertyChangedEventArgs(nameof(SearchText))); UpdateItems(); } } } protected override void OnPropertyChanged(PropertyChangedEventArgs e) { base.OnPropertyChanged(e); if (e.PropertyName == nameof(Text)) { SearchText = Text; } } private void UpdateItems() { ICollectionView view = CollectionViewSource.GetDefaultView(Items); view.Filter = item => ((Item)item).Name.Contains(SearchText); } } ``` 以上代码,我们创建了一个名为 CheckComboBoxWithSearch 的自定义控件,该控件继承自 CheckComboBox。我们添加了一个名为 SearchText 的新属性,用于存储搜索关键字。在该属性的 setter 方法,我们调用 UpdateItems 方法,该方法用于更新视图。在 CheckComboBox 控件的 Text 属性的 PropertyChanged 事件,我们将 Text 属性的值赋给 SearchText 属性,从而触发搜索逻辑。 最后,我们可以在 XAML 使用 CheckComboBoxWithSearch 控件,如下所示: ```xml <local:CheckComboBoxWithSearch x:Name="checkComboBox" DisplayMemberPath="Name" /> ``` ```csharp checkComboBox.ItemsSource = new ObservableCollection<Item> { new Item { Name = "Item 1" }, new Item { Name = "Item 2" }, new Item { Name = "Item 3" }, new Item { Name = "Item 4" }, new Item { Name = "Item 5" }, }; ``` 以上代码,我们在 XAML 使用了 CheckComboBoxWithSearch 控件,并设置了 DisplayMemberPath 属性。然后,在代码我们设置了 CheckComboBox 的 ItemsSource 属性,并添加了一些项用于测试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值