WPF Template

简介:

        控件本身就是模板的组合。如果需要灵活发挥控件的功能,需要加入模板。例如ListBox控件的内容和格式。

 

介绍:

                                                     

DataTemplate

System.Windows.DataTemplate

数据模板
ControlTemplateSystem.Windows.Controls.ControlTemplate控件模板
ItemsPanelTemplateSystem.Windows.Controls.ItemsPanelTemplate布局模板

 

    public class PersonNP : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        private string name;
        public string Name
        {
            get { return name;  }
            set { name = value; Notify(); }
        }

        private string id;
        public string Id
        {
            get { return id; }
            set { id = value;Notify(); }
        }
         
        private void Notify([CallerMemberName]string obj ="")
        {
            if (PropertyChanged != null)
            {
                this.PropertyChanged (this, new PropertyChangedEventArgs(obj));
            }
        }
    }

 

       public MainWindow()
        {
            InitializeComponent();

            ObservableCollection<PersonNP> ocP = new ObservableCollection<PersonNP>() {
            new PersonNP(){Id = "1", Name="test1"},
            new PersonNP(){Id = "2", Name="test2"},
            };

            listBx.ItemsSource = ocP;
           
        }

 

1.DataTemplate 

绑定数据

 <Window.Resources>
        <DataTemplate x:Key="DataT">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition/>
                        <ColumnDefinition/>
                    </Grid.ColumnDefinitions>
                    <TextBlock Text="{Binding Id}"/>
                    <TextBlock Text="{Binding Name}" Grid.Column="1"/>
                </Grid>
        </DataTemplate>
    </Window.Resources>
    <Grid>
        <StackPanel>
            <ListBox x:Name="listBx" ItemTemplate="{StaticResource DataT}"  ></ListBox>
        </StackPanel>
    </Grid>

 

              

 

2. ItemsPanelTemplate

更改排列方式

 <Window.Resources>   
        <DataTemplate x:Key="DataT">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition/>
                        <ColumnDefinition/>
                    </Grid.ColumnDefinitions>
                    <TextBlock Text="{Binding Id}"/>
                    <TextBlock Text="{Binding Name}" Grid.Column="1"/>
                </Grid>
        </DataTemplate>
        <ItemsPanelTemplate x:Key="ItemT">
            <StackPanel Orientation="Horizontal"/>
        </ItemsPanelTemplate>
</Window.Resources>
    <Grid>
        <StackPanel>
            <ListBox x:Name="listBx" ItemTemplate="{StaticResource DataT}" ItemsPanel="{StaticResource ItemT}"></ListBox>
        </StackPanel>
    </Grid>

 

              

 

3.ControlTemplate 

更改控件显示。

ItemsPresenter,用于指定显示项内容的位置。如果不添加,选项不会显示。

 <Window.Resources>   
        <DataTemplate x:Key="DataT">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition/>
                        <ColumnDefinition/>
                    </Grid.ColumnDefinitions>
                    <TextBlock Text="{Binding Id}"/>
                    <TextBlock Text="{Binding Name}" Grid.Column="1"/>
                </Grid>
        </DataTemplate>

        <ItemsPanelTemplate x:Key="ItemT">
            <StackPanel Orientation="Vertical"/>
        </ItemsPanelTemplate>     
  
        <ControlTemplate  TargetType="ListBox" x:Key="ControlT">
            <Border x:Name="border" BorderThickness="2"  CornerRadius="5">
                <ItemsPresenter/>
            </Border>
            
            <ControlTemplate.Triggers >
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter TargetName="border" Property="BorderBrush" Value="Green"></Setter>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </Window.Resources>

    <Grid>
        <StackPanel>
            <ListBox x:Name="listBx"  ItemTemplate="{StaticResource DataT}"  Template="{StaticResource ControlT}" ></ListBox>
        </StackPanel>
    </Grid>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值