我从固定模板创建了一个SplitPage视图,该视图具有以下ListView定义:
<!-- Vertical scrolling item list -->
<ListView
x:Name="itemListView"
AutomationProperties.AutomationId="ItemsListView"
AutomationProperties.Name="Items"
TabIndex="1"
Grid.Row="1"
Margin="-10,-10,0,0"
Padding="120,0,0,60"
ItemsSource="{Binding Source={StaticResource itemsViewSource}}"
IsSwipeEnabled="False"
SelectionChanged="ItemListView_SelectionChanged"
ItemTemplate="{StaticResource Standard130ItemTemplate}"/>
如您所见,它使用StandardStyles.xaml中的Standard130ItemTemplate数据模板:
<!-- List-appropriate 130 pixel high item template as seen in the SplitPage -->
<DataTemplate x:Key="Standard130ItemTemplate">
<Grid Height="110" Margin="6">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}" Width="110" Height="110">
<Image Source="{Binding Image}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Top" Margin="10,0,0,0">
<TextBlock Text="{Binding Title}" Style="{StaticResource TitleTextStyle}" TextWrapping="NoWrap"/>
<TextBlock Text="{Binding Subtitle}" Style="{StaticResource CaptionTextStyle}" TextWrapping="NoWrap"/>
<TextBlock Text="{Binding Description}" Style="{StaticResource BodyTextStyle}" MaxHeight="60"/>
</StackPanel>
</Grid>
</DataTemplate>
问题是所有文本都显示为黑色,即使在所选项目中也是鼠标悬停在具有蓝色突出显示的项目上。我想定义一个新的模板Standard130SelectedItemTemplate,我将文本设置为白色,我只想在选中时将此数据模板分配给ListView。如何将此数据模板分配给选定项目?
答案 0 :(得分:1)
编辑ListView中的ListViewItem style。如果您关注它,您会找到标题为x:Name="contentPresenter"
的部分。这就是实际呈现您的数据模板的原因。如果你达到这种风格的VisualState
并注意到有视觉状态标题为&#34;选择&#34;,&#34;选择&#34;等等
要创建它,请右键单击设计器中的ListView,然后转到“编辑其他模板”,在Style
中添加TargetType=ListViewItem
Resources
ItemContainerStyle
页面的设置,并将ListView
的{{1}}设置为"{StaticResource *InsertStyleKey*}"
,或者只是转到ListView
并将{x 1}添加为<ListView.ItemContainerStyle>
。
如果您执行涉及创建自己样式的任何一个,请复制链接到其中的页面中的代码,以便您可以编辑所有状态。
编辑选定的故事板,在其中设置ContentPresenter的前景并将其更改为白色,如下所示:
<VisualState x:Name="Selected">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="SelectionBackground"
Storyboard.TargetProperty="Opacity"
Duration="0"
To="1" />
<DoubleAnimation Storyboard.TargetName="SelectedBorder"
Storyboard.TargetProperty="Opacity"
Duration="0"
To="1" />
<DoubleAnimation Storyboard.TargetName="SelectedCheckMark"
Storyboard.TargetProperty="Opacity"
Duration="0"
To="1" />
<!--This is where I have changed the Foreground-->
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="contentPresenter"
Storyboard.TargetProperty="Foreground">
<DiscreteObjectKeyFrame KeyTime="0"
Value="White" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
您可能必须对其他一些状态执行相同的操作以使流量正确,与某些“PointedOver”相同。状态。你现在知道要寻找什么了。