WPF 中关于 DataTemplateSelector 类的应用

本文提供了一个使用XAML和C#实现ListBox控件中数据项隔行换色的示例,通过自定义DataTemplateSelector实现了此功能。演示了如何创建自定义DataTemplate和TemplateSelector,并将其应用到ListBox中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MSDN的解释:

提供一种根据数据对象和与该数据绑定的元素来选择数据模板 DataTemplate 的方法。

示例代码:
<Window x:Class="WpfApplication1.Window2"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1"
        Title="Window2" Height="300" Width="300" Loaded="Window2_OnLoaded">
    <Window.Resources>
        <DataTemplate x:Key="T1">
            <TextBlock Text="{Binding}" Background="DarkBlue" Foreground="White" Padding="10,0"></TextBlock>
        </DataTemplate>
        
        <DataTemplate x:Key="T2">
            <TextBlock Text="{Binding}" Background="DarkCyan" Foreground="White" Padding="10,0"></TextBlock>
        </DataTemplate>

        <local:CTemplateSelector x:Key="TS"></local:CTemplateSelector>
    </Window.Resources>
    <Grid>
        <ListBox x:Name="Lbox" ItemTemplateSelector="{StaticResource TS}"></ListBox>
    </Grid>
</Window>
public partial class Window2 : Window
{
    public Window2()
    {
        InitializeComponent();
    }

    private void Window2_OnLoaded(object sender, RoutedEventArgs e)
    {
        var source = new List<string>
        {
            "1","2","3","4"
        };

        this.Lbox.ItemsSource = source;
    }
}
public class CTemplateSelector:DataTemplateSelector
{
    public override DataTemplate SelectTemplate( object item, DependencyObject container )
    {
        if (item == null) throw new ArgumentNullException("item");

        var element = container as FrameworkElement;

        if ( element != null )
        {
            var str = item.ToString();
            int val;

            if (int.TryParse(str, out val))
            {
                if (val%2 == 0)
                {
                    return element.FindResource("T1") as DataTemplate;
                }
                else
                {
                    return element.FindResource( "T2" ) as DataTemplate;
                }
            }
        }

        return base.SelectTemplate(item, container);
    }
}

这个示例就是在一个 ListBox 控件中实现隔行换色的功能,当然也可以通过其他方法实现。

运行结果:

参考:

http://msdn.microsoft.com/zh-cn/library/system.windows.controls.datatemplateselector%28v=vs.110%29.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值