zoukankan      html  css  js  c++  java
  • Silverlight中需要用到模板选择器(DataTemplateSelector)的替代方案

    在WPF下的ListBox,如果我们需要让不同的项根据绑定的值选择不同的数据模板显示,只需要设置ListBox.ItemTemplateSelector属性即可,但在Silverlight下的ListBox控件却没有此属性,因此需要使用另外的方式达到同样的效果。

    下面给出了一个在Silverlight中需要用到模板选择器的情况下的替代方案,或者说是解决这类方法的一个新的思路。

    那就是使用值转换器(IValueConverter)代替模板选择器(DataTemplateSelector)。

        public class TemplateConverter : IValueConverter
        {
            public ControlTemplate Template1 { get; set; }
            public ControlTemplate Template2 { get; set; }
    
            private bool flag = false;
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                flag = !flag;
    
                if (flag)
                {
                    return Template1;
                }
                else
                {
                    return Template2;
                }
            }
    
            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                throw new NotImplementedException();
            }
        }
        <UserControl.Resources>
            <ControlTemplate TargetType="ContentControl" x:Key="t1">
                <TextBlock Text="{Binding}" Foreground="Blue" />
            </ControlTemplate>
            <ControlTemplate TargetType="ContentControl" x:Key="t2">
                <TextBlock Text="{Binding}" Foreground="Red" />
            </ControlTemplate>
    
            <local:TemplateConverter x:Key="TemplateConverter" Template1="{StaticResource t1}" Template2="{StaticResource t2}" />
        </UserControl.Resources>
    
        <Grid x:Name="LayoutRoot" Background="White">
            <ListBox ItemsSource="{Binding SS}">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <ContentControl Template="{Binding Converter={StaticResource TemplateConverter}}" />
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        </Grid>

    示例代码:SilverlightApplication16.zip

    这是我的第一篇博客,有不足之处请见谅。

  • 相关阅读:
    Rsync企业实战之自动异地备份(转)
    Linux启动过程详解 (转)
    Linux系统下修改环境变量PATH路径的三种方法
    linux更改启动级别后,无法启动的问题解决
    MySQLAdmin用法
    mysql toolkit 用法[备忘] (转)
    mysql edit
    MySQL中SSL配置
    mysql ALTER COLUMN MODIFY COLUMN CHANGE COLUMN 区别及用法 (转)
    MySQL 使用mysqld_multi部署单机多实例详细过程 (转)
  • 原文地址:https://www.cnblogs.com/fjicn/p/2990486.html
Copyright © 2011-2022 走看看