在Silverlight 4中,Expression Blend 4引入了一个名为PathListBox的新控件,它位于
http://schemas.microsoft.com/expression/2010/controls
命名空间中。这个控件可以让以路径的方式排列数据、文本、图像或其他控件。可以使用曲折的路径来设置内容,或者使用圆形或矩形路径来组织内容。
本文将指导理解这个控件的功能,并逐步指导创建第一个PathListBox控件演示应用。在这个示例中,将创建两个样本,其中一个是将文本集合定位在圆形路径的边缘。
阅读本文的全文,了解如何实现,并在文章末尾留下疑问或评论。会尽快回答问题。
PathListBox是Expression Blend 4 SDK中新增的一个控件,它在ListBox原有的功能基础上增加了基于路径的布局功能。PathListBox通过属性和自定义子容器控件PathListBoxItem提供了许多定制区域。
可以从微软的网站上了解更多关于这个控件的信息。点击下面的链接了解更多:
在开始讨论之前,首先需要创建一个Silverlight项目。确保使用的是Silverlight 4。需要安装Visual Studio 2010和/或Expression Blend 4来进行开发。这里将只使用Expression Blend,所以如果开发机器上安装了这个,那么就可以开始了。
让开始开发项目。打开Expression Blend 4,从文件菜单创建一个新项目:
从左侧面板选择“Silverlight”,然后从右侧面板选择“Silverlight应用程序+网站”(如上面的截图所示)。需要在网页中托管Silverlight应用程序,因此正在创建一个网站项目。
给项目起一个合适的名字。使用“PathListBoxDemo”作为解决方案的名称。
点击“浏览”设置解决方案的位置,然后点击“确定”继续。这将根据默认模板创建Silverlight项目。
一旦项目已经创建,默认页面名为“MainPage.xaml”,打开该文件,使用PathListBox控件进行设计。按照下面的截图中提到的步骤操作:
点击“资源”选项卡打开控件库。从左侧面板点击“控件”,这将填充所有可用于Silverlight应用程序的控件。
从右侧面板中搜索“PathListBox”,点击它进行选择。选中的PathListBox控件将添加到最近选择的面板中。
双击步骤4中显示的最近选择的面板(如步骤4所示),控件将添加到LayoutRoot网格面板中。
可以在页面上看到添加的PathListBox,将其命名为“pathListBox”。不用担心尺寸。也可以将其设置为零,因为不需要它。现在先保持不变。
一旦PathListBox控件已经添加到页面上,是时候为应用程序添加一个圆形路径控件了。要在XAML页面上创建一个圆形路径,请按照在Expression Blend IDE中的以下步骤:
如上面的截图所述,从Expression Blend的工具箱中选择“椭圆形”控件。
将其添加到名为“LayoutRoot”的网格控件中。确保它已经被添加到PathListBox后面。
调整“椭圆形”控件的大小,使其成为一个合适的圆形。
现在,对圆形路径进行一些样式设置。使用了渐变填充颜色和渐变描边颜色。步骤在下面的截图中提到:
一旦样式设置完成,可以将“椭圆形”控件转换为路径控件。由于PathListBox控件需要一个路径来定位内容,因此将相同的控件转换为路径控件。右键点击“椭圆形”控件在层资源管理器中(如下面的截图所述),然后从右键上下文菜单中选择“路径”,然后点击“转换为路径”。这将把椭圆形变为路径控件。
是时候将最近添加的路径绑定到PathListBox了。可以将多个路径绑定到PathListBox的LayoutPaths。从层面板中选择命名为“pathListBox”的PathListBox控件,并打开所选控件的属性面板。展开名为“布局路径”的属性组。有一个圆形项目,如下面图片中提到的。点击它,然后拖动到下一个截图中显示的圆形路径上。
一旦拖动到圆形路径上,它将显示一个消息“[路径]将被重命名为‘path’”。是的,因为路径控件没有名字,所以Blend会给它一个默认的名字。
放下它后,它会在LayoutPaths部分添加一个名为“path”的路径控件(刚刚重命名的)。可以在这一步中添加想要的任何路径,或者也可以移除任何现有的路径。
如果打开XAML页面,将看到页面上的以下XAML代码片段:
<PathListBox x:Name="pathListBox">
<PathListBox.LayoutPaths>
<LayoutPath></LayoutPath>
</PathListBox.LayoutPaths>
</PathListBox>
让来解释一下XAML代码。在这里将看到PathListBox控件,它在LayoutPaths集合中有一个单一的LayoutPath。可以在这里添加多个LayoutPath。LayoutPath已经绑定到了名为“path”的元素,即圆形路径。
可以在这里使用Padding来设置每个项目之间的间隙值。稍后会讨论这个问题,当绑定内容并展示代码的演示。
可能会问一个问题:“ec命名空间对PathListBox有什么作用?”PathListBox控件不是默认库的一部分。它在Expression控件命名空间中可用。查看以下代码以查看完整的命名空间:
<PathListBox x:Name="pathListBox" xmlns:ec="http://schemas.microsoft.com/expression/2010/controls">
<PathListBox.LayoutPaths>
<ec:LayoutPath></ec:LayoutPath>
</PathListBox.LayoutPaths>
</PathListBox>
到目前为止,UI设计已经完成。现在是时候在代码后面创建一些数据记录,并相应地绑定到PathListBox控件的ItemSource。打开MainPage.xaml.cs文件,并在其中创建一个字符串列表集合。在这里使用了一年的12个月。现在将创建的列表集合设置为pathListBox的ItemSource。
private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
List<string> months = new List<string> { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" };
pathListBox.ItemsSource = months;
}
是时候演示应用程序了。通过在IDE(无论是Visual Studio 2010还是Expression Blend 4)中按“F5”来构建并运行项目。将看到Silverlight应用程序已经加载到浏览器窗口中。会注意到,月份的集合已经加载到Silverlight应用程序中,并且与圆形路径的方向相同。每个项目之间的间隙量是相同的。这不过是padding值。如果增加padding值,将看到项目之间的间隙会比之前更大;反之,项目会彼此靠近。
现在,第一个示例已经准备好了。现在可能会遇到这样的情况:每个单词的每个字符都会以与圆形路径相同的方向放置。所以,问一个问题:能做到吗?是的,可以做到。可以改变PathListBox的方向。默认值是none。还有一个方向叫做“OrientToPath”。一旦设置,它将重新定位项目在路径的边缘。
因此,再次打开Expression Blend,并转到PathListBox控件的属性窗格。在LayoutPaths标签页中,可以看到有一个名为“Orientation”的属性可用(见下面的截图)。点击第二个方向,叫做“OrientToPath”。