实现效果:ide
实践:布局
重要代码:
ImportantTaskTemplate的模板以下:spa
<DataTemplate x:Key="ImportantTaskTemplate"> <DataTemplate.Resources> <Style TargetType="TextBlock"> <Setter Property="FontSize" Value="20"/> </Style> </DataTemplate.Resources> <Border Name="border" BorderBrush="Red" BorderThickness="1" Padding="5" Margin="5"> <DockPanel HorizontalAlignment="Center"> <TextBlock Text="{Binding Path=Description}" /> <TextBlock>!</TextBlock> </DockPanel> </Border> </DataTemplate>
数据模板触发器xaml代码
DataTrigger-Binding-Value--Settercode
<DataTemplate.Triggers> <DataTrigger Binding="{Binding Path=TaskType}"> <DataTrigger.Value> <local:TaskType>Home</local:TaskType> </DataTrigger.Value> <Setter TargetName="border" Property="BorderBrush" Value="Yellow"/> </DataTrigger> </DataTemplate.Triggers>
界面xamlorm
<StackPanel> <TextBlock FontSize="20" Text="My Task List:"/> <ListBox Width="400" Margin="10" ItemsSource="{Binding Source={StaticResource MyTodoList}}" ItemTemplateSelector="{StaticResource MyDataTemplateSelector}" HorizontalContentAlignment="Stretch" IsSynchronizedWithCurrentItem="True"/> <TextBlock FontSize="20" Text="Information:"/> <ContentControl Content="{Binding Source={StaticResource MyTodoList}}" ContentTemplate="{StaticResource MyTaskTemplate}"/> </StackPanel>
选择器继承DataTemplateSelector类
业务逻辑:若是任务重要性等于1,则加载指定重要模板资源,不然加载通常资源对象
public class TaskListDataTemplateSelector : DataTemplateSelector { public override DataTemplate SelectTemplate(object item, DependencyObject container) { if (item != null && item is Task) { var taskitem = (Task) item; var window = Application.Current.MainWindow; if (taskitem.Priority == 1) return window.FindResource("ImportantTaskTemplate") as DataTemplate; return window.FindResource("MyTaskTemplate") as DataTemplate; } return null; } }
扩展:
DataTemplateSelector 类:继承
ItemsControl.ItemTemplateSelector 属性:ip