Metro应用程序:所选项目的ListView ItemTemplate DataTemplate

时间:2013-05-01 02:48:07

标签: listview microsoft-metro datatemplate selected itemtemplate

我从固定模板创建了一个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。如何将此数据模板分配给选定项目?

1 个答案:

答案 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”相同。状态。你现在知道要寻找什么了。