zoukankan      html  css  js  c++  java
  • WPF---数据模板(一)

    一、场景模拟

    假设我们现在有如下需求:

    我们需要在ListBox中的每个Item中显示某个成员的姓名、年龄以及喜欢的颜色,点击Item的时候,会在右边显示详细信息,同时也想让ListBox的样式变得好看一些,比如带有绿色边框等。

    为了实现以上需求,我们可以使用控件模板来修改ListBox的默认样式,使之变得生动有趣,使用数据模板来改变ListBoxItem的数据呈现形式。

    二、Demo

    为了改变ListBoxItem的外观,我们在资源里定义一个名字为listBoxItemTemplate的数据模板模板中使用Binding将数据进行关联,然后为ListBox的ItemTemplate属性进行赋值

    当我们点击左面ListBoxItem的时候,为了能在右面显示详细信息,我们定义四个Label,绑定左侧选中的ListBoxItem。

    为了绑定方便,我们为四个Label加个父容器StackPanel,并将它的DataContext属性绑定到选中的ListBoxItem上(四个Label的DataContext就会继承StackPanel的DataContext属性)。

    具体代码以及运行截图参见以下:

     1 using System.Collections.ObjectModel;
     2 using System.Windows;
     3 
     4 namespace DataTemplateDemo1
     5 {
     6     /// <summary>
     7     /// Interaction logic for MainWindow.xaml
     8     /// </summary>
     9 
    10     public partial class MainWindow : Window
    11     {
    12         private ObservableCollection<Student> observableCollection = new ObservableCollection<Student>();
    13         public  ObservableCollection<Student> ObservableCollection
    14         {
    15             get { return observableCollection; }
    16             set { observableCollection = value; }
    17         }
    18         public MainWindow()
    19         {
    20             InitializeComponent();
    21             this.DataContext = this;
    22             observableCollection.Add(new Student() {Name = "Tom", Age= 16, FavorColor="Red",Hobby="Swim" });
    23             observableCollection.Add(new Student() { Name = "Maty", Age = 18, FavorColor = "Green" ,Hobby="Football"});
    24             observableCollection.Add(new Student() { Name = "Alice", Age = 19, FavorColor = "Yellow" ,Hobby="Running"});
    25         }
    26     }
    27 
    28     public class Student
    29     {
    30         public int Age { get; set; }
    31         public string Name { get; set; }
    32         public string FavorColor { get; set; }
    33         public string Hobby { get; set; }
    34     }
    35 
    36 }
     1 <Window x:Class="DataTemplateDemo1.MainWindow"
     2         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     3         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     4         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
     5         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
     6         xmlns:local="clr-namespace:DataTemplateDemo1"
     7         mc:Ignorable="d"
     8         Title="DataTemplateDemo" Height="350" Width="525">
     9     <Window.Resources>
    10 
    11         <ControlTemplate x:Key="ListBoxControlTemplate" TargetType="ListBox">
    12             <Grid>
    13                 <Border BorderBrush="Green" BorderThickness="1" CornerRadius="5" >
    14                     <Grid>
    15                         <ItemsPresenter TextBlock.Foreground="Green"></ItemsPresenter>
    16                     </Grid>
    17                 </Border>
    18             </Grid>
    19         </ControlTemplate>
    20 
    21         <DataTemplate x:Key="listBoxItemTemplate">
    22             <Grid Height="50">
    23                 <Grid.ColumnDefinitions>
    24                     <ColumnDefinition Width="150"/>
    25                     <ColumnDefinition Width="50"/>
    26                 </Grid.ColumnDefinitions>
    27                 <Grid.RowDefinitions>
    28                     <RowDefinition/>
    29                     <RowDefinition/>
    30                 </Grid.RowDefinitions>
    31                 <TextBlock  Name="textbox1" Text="{Binding Name}" Grid.Row="0" Margin="5"/>
    32                 <TextBlock  Name="textbox2" Text="{Binding Age}" Grid.Row="1" Margin="5"/>
    33                 <Rectangle Fill="{Binding FavorColor}" Grid.Column="1" Grid.Row="0" Grid.RowSpan="2" Margin="3"></Rectangle>
    34 
    35             </Grid>
    36         </DataTemplate>
    37     </Window.Resources>
    38     <Grid>
    39         <StackPanel Orientation="Horizontal">
    40 
    41             <ListBox Margin="5" Name="stuList"
    42                  Template="{StaticResource ListBoxControlTemplate}" 
    43                  ItemsSource="{Binding ObservableCollection}" 
    44                  ItemTemplate="{StaticResource listBoxItemTemplate}">
    45             </ListBox>
    46             <StackPanel DataContext="{Binding Path=SelectedItem,ElementName=stuList}">
    47                 <Label Content="{Binding Name}"></Label>
    48                 <Label Content="{Binding Age}"></Label>
    49                 <Label Content="{Binding FavorColor}"></Label>
    50                 <Label Content="{Binding Hobby}"></Label>
    51             </StackPanel>
    52         </StackPanel>
    53 
    54     </Grid>
    55 </Window>
    View Code

  • 相关阅读:
    Windows Phone自学笔记(2)
    对MVC的初步认识
    CMSIS 的相关知识
    关于机器码的一些疑惑
    关于预编译处理的尝试
    IAR提示错误C:\Program Files\IAR Systems\Embedded Workbench 6.4 Kickstart\arm\bin路径下的armjlink.dll文件
    Spring学习笔记(四)
    Spring学习笔记(三)
    Docker容器数据卷(v创建数据卷)
    Spring5学习笔记(一)
  • 原文地址:https://www.cnblogs.com/3xiaolonglong/p/9870241.html
Copyright © 2011-2022 走看看