Metro UI动态调用自定义模版(Template)

public class MyTemplateSelector : DataTemplateSelector
    {
        public DataTemplate importantTaskTemplate { get; set; }
        public DataTemplate myTaskTemplate { get; set; }
        protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
        {
            FrameworkElement element = container as FrameworkElement;
            if (element != null && item != null && item is TEST)
            {
                TEST taskitem = item as TEST;
                if (taskitem.Title == "Title")
                    return importantTaskTemplate;
                else
                    return myTaskTemplate;
            }
            return null;
        }
    }


需要自定义一个继承自DataTemplateSelector的类

public class TEST
    {
        public string Title { get; set; }
        public string Subtitle { get; set; }
    }


一个可提供判断条件的类

<Page.Resources>
        <CollectionViewSource x:Name="cv1"></CollectionViewSource>
        <!-- TODO: Delete this line if the key AppName is declared in App.xaml -->
        <x:String x:Key="AppName">My Application</x:String>
        <DataTemplate x:Name="importantTaskTemplate">
            <Border x:Name="border" BorderBrush="Red" BorderThickness="1"
        		Padding="5" Margin="5">
                <StackPanel HorizontalAlignment="Center">
                    <TextBlock Text="{Binding Title}" />
                    <TextBlock>
        				<Run Text="!"/>
                    </TextBlock>
                </StackPanel>
            </Border>
        </DataTemplate>
        <DataTemplate x:Name="myTaskTemplate">
            <Border x:Name="border" BorderBrush="Aqua" BorderThickness="1"
        		Padding="5" Margin="5">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition/>
                        <RowDefinition/>
                        <RowDefinition/>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition />
                        <ColumnDefinition />
                    </Grid.ColumnDefinitions>
                    <TextBlock Grid.Row="0" Grid.Column="0" Text="Task Name:"/>
                    <TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Title}" />
                    <TextBlock Grid.Row="1" Grid.Column="0" Text="Description:"/>
                    <TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding Title}"/>
                    <TextBlock Grid.Row="2" Grid.Column="0" Text="Priority:"/>
                    <TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding Title}"/>
                </Grid>
            </Border>

        </DataTemplate>
        <local:MyTemplateSelector x:Key="myDataTemplateSelector" importantTaskTemplate="{StaticResource importantTaskTemplate}" myTaskTemplate="{StaticResource myTaskTemplate}"/>

    </Page.Resources>


XAML文件中的自定义模板与自定义类的模板绑定

<GridView x:Name="gridview" HorizontalAlignment="Left" VerticalAlignment="Top" Width="633"  ItemTemplateSelector="{StaticResource myDataTemplateSelector}" Margin="10,10,0,0" Grid.Row="1" Height="498"/>

控件对模板的绑定

猜你喜欢

转载自blog.csdn.net/willianyy/article/details/8128985