實現效果: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