WPF中使用ItemsControl嵌套绑定,在ItemsControl中嵌套一个ItemsControl,然后使用绑定(2)
2012-09-18 18:38
435 查看
为了能够适应不同分辨率的显示器,所以把第一层 DataTemplate 的 Width 属性和 SystemParameters.PrimaryScreenWidth 绑定了,实际上是通过一个 Converter 实现的(见 Source)。
第二层 ItemsControl 的 DataTemplate 的 width 属性也想绑定到 SystemParameters.PrimaryScreenWidth,于是也自定义了一个 Converter。并且通过<local:MyConverter2 x:Key="C2ItemW"/> 引入。
需要说明的是,如果两层 DataTemplate 声明称一个 Resource,这时第二层 DataTemplate 的绑定总是不起作用(可能是我方法不对)。如果把第二层的提出来,单独作为一个 Resource声明。然后在第一层 DataTemplate 中通过 ItemTemplate指定就可以了。
下面上Source:
主ItemsControl:
第一层DataTemplate的Resource:
第二层DataTemplate:
做成后的效果图:
可以左右翻页,每页中得项目数根据自己定义的列表显示。
第二层 ItemsControl 的 DataTemplate 的 width 属性也想绑定到 SystemParameters.PrimaryScreenWidth,于是也自定义了一个 Converter。并且通过<local:MyConverter2 x:Key="C2ItemW"/> 引入。
需要说明的是,如果两层 DataTemplate 声明称一个 Resource,这时第二层 DataTemplate 的绑定总是不起作用(可能是我方法不对)。如果把第二层的提出来,单独作为一个 Resource声明。然后在第一层 DataTemplate 中通过 ItemTemplate指定就可以了。
下面上Source:
主ItemsControl:
<ItemsControl Background="Green" ItemTemplate="{StaticResource xItemTemplate}"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Horizontal" VerticalAlignment="Center"/> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> </ItemsControl>
第一层DataTemplate的Resource:
<DataTemplate x:Key="xItemTemplate" DataType="{x:Type local:Items}"> <!-- 就是这里指定第二层DataTemplate --> <ItemsControl ItemsSource="{Binding SubItems}" ItemTemplate="{StaticResource xItemsBase}" HorizontalContentAlignment="Center" ScrollViewer.HorizontalScrollBarVisibility="Hidden"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center" Width="{Binding Converter={StaticResource Convert2BasePanelWidth}}" Margin="133,0"/> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> </ItemsControl> </DataTemplate>
第二层DataTemplate:
<local:MyConverter1 x:Key="Convert2BasePanelWidth"/> <local:MyConverter2 x:Key="Convert2ItemWidth"/> <DataTemplate x:Key="xItemsBase"> <DataTemplate.Resources> <Style TargetType="{x:Type Border}"> <Setter Property="BorderBrush" Value="Orange"/> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Trigger.EnterActions> <BeginStoryboard> <Storyboard> <ThicknessAnimation Storyboard.TargetProperty="Margin" To="0" Duration="0:0:.2"/> <ThicknessAnimation Storyboard.TargetProperty="BorderThickness" To="1.5" Duration="0:0:.15"/> </Storyboard> </BeginStoryboard> </Trigger.EnterActions> <Trigger.ExitActions> <BeginStoryboard> <Storyboard> <ThicknessAnimation Storyboard.TargetProperty="Margin" To="4" Duration="0:0:.2"/> <ThicknessAnimation Storyboard.TargetProperty="BorderThickness" To="3" Duration="0:0:.15"/> </Storyboard> </BeginStoryboard> </Trigger.ExitActions> </Trigger> </Style.Triggers> </Style> </DataTemplate.Resources> <StackPanel Orientation="Vertical" Width="{Binding Converter={StaticResource Convert2ItemWidth}}" VerticalAlignment="Center" HorizontalAlignment="Center"> <Border BorderThickness="3" CornerRadius="7" Margin="4,0"> <Image Source="{Binding Image}" Stretch="Uniform" MouseEnter="Image_MouseEnter" MouseLeave="Image_MouseLeave"/> </Border> <TextBlock Text="{Binding Name}" Margin="4,0" FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Top" FontFamily="Segoe UI"/> </StackPanel> </DataTemplate>
做成后的效果图:
可以左右翻页,每页中得项目数根据自己定义的列表显示。
相关文章推荐
- WPF中使用ItemsControl嵌套绑定,在ItemsControl中嵌套一个ItemsControl,然后使用绑定
- WPF项目中使用水晶报表for vs2010时的一个找不到程序集的问题
- 主场景当中添加层,然后有一个get方法,方便使用
- C Primer plus 10.2 初始化一个double类型的数组,然后把该数组的内容拷贝至3个其它的数组中,使用带数组的表示方法的函数进行第一份拷贝,使用带指针表示方法和指针递增的函..
- 综合应用WPF/WCF/WF/LINQ之二十四:使用UserControl技术编写一个翻页控件
- WPF使用HierarchicalDataTemplate绑定Dictionary生成TreeView
- opengl离屏渲染(不需要和窗口绑定,仅当作一个可以渲染一张图片的API使用)+ opencv显示
- 编写一个程序读入一行输入,然后反向打印该行,您可以把输入存储在一个char数组中: 假定该行不超过255个字符。回忆一下,您可以使用具有%c说明符的scanf()从输入中一次 读入一个字符,而且当您按
- 使用嵌套的repeater实现权限信息三级目录的绑定
- 使用VS2010为Windows“.NET研究”7编写一个杀手级WPF应用
- 使用XIB自定义一个UIView,然后将这个view添加到controller的view 上(相当于所有界面都通过xib来实现)
- 输入一个Email地址,然后使用正则表达式验证该Email地址是否正确。
- [转]WPF and Silverlight 学习笔记(二十五):使用CollectionView实现对绑定数据的排序、筛选、分组
- 使用ADF bindings访问一个嵌套的对象
- iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序
- WPF DataGrid某列使用多绑定后该列排序失效,列上加入 SortMemberPath 设置即可.
- Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定)
- Silverlight教程第八部分:使用WPF创建一个Digg桌面应用
- WPF使用异步+绑定的方式处理大数据量
- MES项目中出现的一个事务嵌套的使用场景