我该如何在UWP项目中更改ListView的SelectedItem的DataTemplate?我尝试使用DataTemplateSelector,但问题是SelectTemplateCore只被调用了一次。
这是我尝试过的:
我的模板选择器类
public class MyTemplateSelector : DataTemplateSelector
{
public DataTemplate DefaultTemplate { get; set; }
public DataTemplate SelectedItemTemplate { get; set; }
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
{
var cont = container as ListViewItem;
if (cont != null)
{
FrameworkElement elemnt = container as FrameworkElement;
if (cont.IsSelected)
{
return SelectedItemTemplate;
}
else
{
return DefaultTemplate;
}
}
else
return DefaultTemplate;
}
}
页面资源
<Page.Resources>
<DataTemplate x:Key="DefaultTemplate">
<Grid Height="44">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="44" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<SymbolIcon Grid.Column="0" Symbol="{Binding Icon, Mode=OneWay}" Foreground="Black"
Height="40" Width="40" Margin="2"/>
<TextBlock Grid.Column="1" Text="{Binding Name, Mode=OneWay}" FontSize="16" VerticalAlignment="Center" Foreground="Black" />
</Grid>
</DataTemplate>
<DataTemplate x:Key="SelectedItemTemplate">
<Grid Height="44" Background="Black">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="44" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<SymbolIcon Grid.Column="0" Symbol="{Binding Icon, Mode=OneWay}" Foreground="Black"
Height="40" Width="40" Margin="2"/>
<TextBlock Grid.Column="1" Text="{Binding Name, Mode=OneWay}" FontSize="16" VerticalAlignment="Center" Foreground="Black" />
</Grid>
</DataTemplate>
<local:DefaultTemplateSelector x:Key="TemplateSelector"
DefaultTemplate="{StaticResource DefaultTemplate}"
SelectedItemTemplate="{StaticResource SelectedItemTemplate}"/>
</Page.Resources>
列表视图
<ListView x:Name="MyListView" ItemContainerStyle="{StaticResource DefaultStyle}" ItemTemplateSelector="{StaticResource TemplateSelector}">
</ListView>