ItemsControl详解

1.奇偶行拥有不同背景色 AlternationIndex

image-20250503134539375

<ItemsControl ItemsSource="{Binding Stars}" AlternationCount="2">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Border Padding="10"
                    Name="border">
                <TextBlock Text="{Binding}" />
            </Border>
            <DataTemplate.Triggers>
                <Trigger Property="ItemsControl.AlternationIndex"
                         Value="1">
                    <Setter TargetName="border"
                            Property="Background"
                            Value="LightGray" />
                </Trigger>
            </DataTemplate.Triggers>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

2.修改数据排布方式 ItemsPanel

image-20250503140356057

<ItemsControl ItemsSource="{Binding Stars}" AlternationCount="2">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <UniformGrid />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Border Padding="10"
                    Name="border">
                <TextBlock Text="{Binding}" />
            </Border>
            <DataTemplate.Triggers>
                <Trigger Property="ItemsControl.AlternationIndex"
                         Value="1">
                    <Setter TargetName="border"
                            Property="Background"
                            Value="LightGray" />
                </Trigger>
            </DataTemplate.Triggers>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

3.添加标题 Template

image-20250503140435922

<ItemsControl ItemsSource="{Binding Stars}" AlternationCount="2">
    <ItemsControl.Template>
        <ControlTemplate TargetType="ItemsControl">
            <DockPanel>
                <TextBlock Text="七大行星"
                           FontSize="18"
                           DockPanel.Dock="Top" />
                <ItemsPresenter />
            </DockPanel>
        </ControlTemplate>
    </ItemsControl.Template>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Border Padding="10"
                    Name="border">
                <TextBlock Text="{Binding}" />
            </Border>
            <DataTemplate.Triggers>
                <Trigger Property="ItemsControl.AlternationIndex"
                         Value="1">
                    <Setter TargetName="border"
                            Property="Background"
                            Value="LightGray" />
                </Trigger>
            </DataTemplate.Triggers>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

IsItemsHost属性相当于设置为true之后,相当于设置了ItemsPanel

<ItemsControl.Template>
    <ControlTemplate TargetType="ItemsControl">
        <DockPanel>
            <TextBlock Text="七大行星"
                       FontSize="18"
                       DockPanel.Dock="Top" />
            <StackPanel IsItemsHost="True" />
        </DockPanel>
    </ControlTemplate>
</ItemsControl.Template>

4.用画布绘制几何图形 ItemTemplate+ItemContainerStyle

image-20250503143612534

<ItemsControl ItemsSource="{Binding Shapes}" >
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemContainerStyle>
        <Style TargetType="ContentPresenter">
            <Setter Property="Canvas.Left"
                    Value="{Binding Pos.X}" />
            <Setter Property="Canvas.Top"
                    Value="{Binding Pos.Y}" />
        </Style>
    </ItemsControl.ItemContainerStyle>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Rectangle Width="40"
                       Name="rect"
                       Height="40" Fill="{Binding Color}"/>
            <DataTemplate.Triggers>
                <DataTrigger Binding="{Binding Type}"
                             Value="1">
                    <Setter TargetName="rect"
                            Property="RadiusX"
                            Value="20" />
                    <Setter TargetName="rect"
                            Property="RadiusY"
                            Value="20" />
                </DataTrigger>
            </DataTemplate.Triggers>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

5.为不同的数据类型添加不同的模板(类型不同)Resource+DataTemplate

image-20250503155412478

<ItemsControl Margin="5" ItemsSource="{Binding Fruits}" >
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <UniformGrid Columns="3"></UniformGrid>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.Resources>
        <DataTemplate DataType="{x:Type local:Apple}">
            <Border BorderThickness="1"
                    BorderBrush="Gray"
                    Margin="5"
                    Width="200"
                    Background="LightCoral"
                    Height="{Binding RelativeSource={RelativeSource Self},Path=ActualWidth}">
                <TextBlock Text="{Binding Amount,StringFormat=Amount:{0}}" />
            </Border>
        </DataTemplate>
        <DataTemplate DataType="{x:Type local:Banana}">
            <Button BorderThickness="1"
                    BorderBrush="Gray"
                    Background="LightYellow"
                    Margin="5"
                    Width="200"
                    Height="{Binding RelativeSource={RelativeSource Self},Path=ActualWidth}">
                <TextBlock Text="{Binding Amount,StringFormat=Amount:{0}}" />
            </Button>
        </DataTemplate>
    </ItemsControl.Resources>
</ItemsControl>
<local:EmployeeTemplateSelector.MaleTemplate>
    <DataTemplateSelector>
        <Border Height="200" Background="LightCyan">
            <TextBlock Text="{Binding Name}" />
        </Border>
    </DataTemplateSelector>
</local:EmployeeTemplateSelector.MaleTemplate>
<local:EmployeeTemplateSelector.FemaleMaleTemplate>
    <DataTemplateSelector>
        <Border Height="200"
                Background="LightPink">
            <TextBlock Text="{Binding Name}" />
        </Border>
    </DataTemplateSelector>
</local:EmployeeTemplateSelector.FemaleMaleTemplate>

6.为不同数据类型(类型相同属性不同)ItemTemplateSelector

image-20250503163057492

public class EmployeeTemplateSelector : DataTemplateSelector
{
    public DataTemplate MaleTemplate { get; set; }
    public DataTemplate FemaleTemplate { get; set; }

    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        var element = container as FrameworkElement;
        var employee = item as Employee;
        return employee.Gender switch
        {
            Gender.Male => MaleTemplate,
            Gender.Female => FemaleTemplate,
            _ => throw new ArgumentException()
        };
    }

}
<ItemsControl Margin="5"
              ItemsSource="{Binding Employees}" >
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <UniformGrid Columns="3"></UniformGrid>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplateSelector>
        <local:EmployeeTemplateSelector>
            <local:EmployeeTemplateSelector.MaleTemplate>
                <DataTemplate>
                    <Border Height="200"
                            Background="LightCyan">
                        <TextBlock Text="{Binding Name}" />
                    </Border>
                </DataTemplate>
            </local:EmployeeTemplateSelector.MaleTemplate>
            <local:EmployeeTemplateSelector.FemaleTemplate>
                <DataTemplate>
                    <Border Height="200"
                            Background="LightPink">
                        <TextBlock Text="{Binding Name}" />
                    </Border>
                </DataTemplate>
            </local:EmployeeTemplateSelector.FemaleTemplate>
        </local:EmployeeTemplateSelector>
        
    </ItemsControl.ItemTemplateSelector>
</ItemsControl>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值