新时尚Windows8开发(22):ListBox与ComboBox

2024-03-20 01:08

本文主要是介绍新时尚Windows8开发(22):ListBox与ComboBox,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这两个家伙,对我们来说,是绝对不陌生的,从WinForm到WPF,到Asp.net,我们都会接触到这两个控件,而且我相信我们也经常使用。

 

ListBox

先说ListBox,这个其实很简单,应该说,对于所有的集合控件,都是一样的使用方法,往里面放东西就两种途径:

1、数据绑定;

2、手动添加项。

而ListBox对应的项是ListBoxItem,说得更明白一些,它就是一个ContentControl,就像Button一样,都有一个Content属性,而我们就通过这个属性来设置项里面要显示的东西。对于数据绑定而言,因为是批量化的,所以,这个时候,我们就要用上DataTemplate了。

 

先来看看ListBox的数据绑定的例子。

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<ListBox x:Name="list" Width="365"/>
</Grid>


在代码视图中,我们在MainPage类的构造函数中设置数据源,其实就是设置它的ItemsSource属性。

        public MainPage()
{
this.InitializeComponent();
string[] items = { "夏", "商", "周", "春秋战国", "秦", "汉", "三国魏晋南北朝", "隋", "唐" };
this.list.ItemsSource = items;
}


然后按下F5,你能看到以下的效果。

 

可是,有时候,似乎只显示一个文本还不够,有可能我们用的数据源较为复杂。

好的,现在我们来伪造一些测试数据,先定义实体类。

    public class Employee
{
public string EmName { get; set; }
public string EmNo { get; set; }
public int EmAge { get; set; }
public Windows.UI.Xaml.Media.Imaging.BitmapImage Photo { get; set; }
}


接着弄好XAML。

        <ListBox x:Name="listEmp" SelectionMode="Single">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid Margin="10" Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" Grid.ColumnSpan="2" FontWeight="Bold" FontSize="24" Margin="3,2,3,2" Text="{Binding EmName}"/>
<TextBlock Text="工号:" Grid.Row="1" Grid.Column="0"/>
<TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding EmNo}"/>
<TextBlock Grid.Row="2" Grid.Column="0" Text="年龄:"/>
<TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding EmAge}"/>
</Grid>
<Image Grid.Column="0" Margin="4" Source="{Binding Photo}" Stretch="Uniform"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>


在代码视图中进行绑定。

            List<Employee> empList = new List<Employee>();
Employee e1 = new Employee
{
EmName = "胡扯",
EmNo = "HC-22556854",
EmAge = 38,
Photo = new Windows.UI.Xaml.Media.Imaging.BitmapImage(new Uri("ms-appx:///Assets/1.jpg"))
};
empList.Add(e1);
Employee e2 = new Employee
{
EmName = "张大腿",
EmNo = "HC-62254585",
EmAge = 41,
Photo = new Windows.UI.Xaml.Media.Imaging.BitmapImage(new Uri("ms-appx:///Assets/1.jpg"))
};
empList.Add(e2);
Employee e3 = new Employee
{
EmName = "草先生",
EmNo = "HC-2000355462",
EmAge = 41,
Photo = new Windows.UI.Xaml.Media.Imaging.BitmapImage(new Uri("ms-appx:///Assets/1.jpg"))
};
empList.Add(e3);
this.listEmp.ItemsSource = empList;


这里我们就用到了数据模板了,因为我们每一项要显示的内容有员工头像,姓名,工号,年龄多个字段,明显仅依靠一个字符串是做不到的,因此,必要时,我们出动数据模板。

 

可能有人会想了,这ListBox默认是纵向排列的,有没有办法让它的项水平排列呢?当然有,ItemsPanel属性正是让我们来决定它的项列表如何排列的,它可以设置一个面板,如

            <ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>


再运行一下,你就能看到它们水平排列了。

怎么样,这三位哥们儿挺帅的吧。

 

接下来是手动添加项,这个就更简单了,看看下面的XAML你就懂了。

        <ListBox>
<ListBoxItem>项目一</ListBoxItem>
<ListBoxItem>
<ListBoxItem.Content>
<Rectangle Width="480" Height="80" Fill="Orange"/>
</ListBoxItem.Content>
</ListBoxItem>
<ListBoxItem>
<ListBoxItem.Content>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="请输入一个数字:" FontSize="25"/>
<TextBox Grid.Column="1" Width="260"/>
</Grid>
</ListBoxItem.Content>
</ListBoxItem>
</ListBox>


运行后就是这样:

 

 

ComboBox

其实与ListBox是一样的,只不过它是一个下拉列表框罢了。其项列表对应着是ComboBoxItem类。

考虑下面的例子,我们在ComboBox里面放些东东,然后,当我们选择了特定项后,TextBlock中文本的颜色随之改变。

1、先布局UI。

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<StackPanel>
<ComboBox x:Name="cb" Width="275" HorizontalAlignment="Left">
<ComboBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Rectangle Grid.Column="0" Width="25" Height="25" Margin="5" Fill="{Binding Path=Brush}"/>
<TextBlock Grid.Column="1" Text="{Binding Path=ColorName}" VerticalAlignment="Center" Margin="3,2,2,2"/>
</Grid>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock Margin="5,20,0,0" FontSize="60" FontWeight="Black" Text="文本颜色" x:Name="tb"/>
</StackPanel>
</Grid>


接下来嘛,你猜到了,肯定是写处理代码了。

在MainPage类的构造函数中,我们为ComboBox添加4个可选项。并且处理它的SelectionChanged事件,对于绑定,我们这次不必定义一个类这么麻烦,别忘了,.net里面有一个很灵活的类型——dynamic,再配全new 关键字,我们就可以动态定义一个对象出来了。

        public MainPage()
{
this.InitializeComponent();
List<dynamic> colorList = new List<dynamic>();
colorList.Add(new { 
Brush = new SolidColorBrush(Colors.Yellow),
ColorName = "黄色"
});
colorList.Add(new
{
Brush = new SolidColorBrush(Colors.Blue),
ColorName = "蓝色"
});
colorList.Add(new
{
Brush = new SolidColorBrush(Colors.Gray),
ColorName = "灰色"
});
colorList.Add(new
{
Brush = new SolidColorBrush(Colors.Pink),
ColorName = "粉红色"
});
this.cb.ItemsSource = colorList;
// 绑定事件,对ComboBox的选择作出响应
cb.SelectionChanged += (a, args) =>
{
if (args.AddedItems.Count <= 0)
{
return;
}
dynamic item = (dynamic)args.AddedItems[0];
if (item != null)
{
this.tb.Foreground = item.Brush;
}
};
if (cb.Items.Count > 0)
{
cb.SelectedIndex = 0;
}
}


 

 

本节的实例貌似较多,待会儿我把源码打包上传到资源中。

这篇关于新时尚Windows8开发(22):ListBox与ComboBox的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/827802

相关文章

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

C#图表开发之Chart详解

《C#图表开发之Chart详解》C#中的Chart控件用于开发图表功能,具有Series和ChartArea两个重要属性,Series属性是SeriesCollection类型,包含多个Series对... 目录OverviChina编程ewSeries类总结OverviewC#中,开发图表功能的控件是Char

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

C# ComboBox下拉框实现搜索方式

《C#ComboBox下拉框实现搜索方式》文章介绍了如何在加载窗口时实现一个功能,并在ComboBox下拉框中添加键盘事件以实现搜索功能,由于数据不方便公开,作者表示理解并希望得到大家的指教... 目录C# ComboBox下拉框实现搜索步骤一步骤二步骤三总结C# ComboBox下拉框实现搜索步骤一这

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD