首页 > Windows开发 > 详细

WPF 中关于 DataTemplateSelector 类的应用

时间:2015-01-05 16:17:44      阅读:328      评论:0      收藏:0      [点我收藏+]

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

WPF 中关于 DataTemplateSelector 类的应用

原文:http://www.cnblogs.com/jRoger/p/4203647.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!