在win8商店应用中,如何在GridView中淡入淡出项目?

时间:2013-02-08 21:30:00

标签: c# xaml windows-8 microsoft-metro winrt-xaml

我是Win8开发的新手,我坚持实现一些我认为相当容易的设计,因为我确实有一些C#,Javascript等经验。

我创建了一个像这样的DataTemplate:

<DataTemplate x:Key="Customized250x250ItemTemplate">
    <Grid HorizontalAlignment="Left" Width="250" Height="250">
        <Border>
            <Image Source="{Binding Image}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/>
        </Border>
        <TextBlock HorizontalAlignment="Right" TextWrapping="Wrap" Text="{Binding State}" VerticalAlignment="Top" Margin="0,10,20,0" FontFamily="Segoe UI" FontSize="12"/>
        <Grid x:Name="InfoGrid" Background="Black" Opacity="0">
            <Grid.RowDefinitions>
            <RowDefinition Height="20"/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition Height="20"/>
        </Grid.RowDefinitions>
        <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="Nickname" VerticalAlignment="Center" Margin="10,0,0,0" FontFamily="Segoe UI" FontSize="17.333" Grid.Row="1"/>
        <TextBlock HorizontalAlignment="Right" TextWrapping="Wrap" Text="{Binding Nickname}" VerticalAlignment="Center" Margin="0,0,20,0" FontFamily="Segoe UI" FontSize="19.333" Grid.Row="2"/>
        <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="Age" VerticalAlignment="Center" Margin="10,0,0,0" FontFamily="Segoe UI" FontSize="17.333" Grid.Row="3"/>
        <TextBlock HorizontalAlignment="Right" TextWrapping="Wrap" Text="{Binding Age}" VerticalAlignment="Center" Margin="0,0,20,0" FontFamily="Segoe UI" FontSize="19.333" Grid.Row="4"/>
        <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="Race" VerticalAlignment="Center" Margin="10,0,0,0" FontFamily="Segoe UI" FontSize="17.333" Grid.Row="5"/>
        <TextBlock HorizontalAlignment="Right" TextWrapping="Wrap" Text="{Binding Race}" VerticalAlignment="Center" Margin="0,0,20,0" FontFamily="Segoe UI" FontSize="19.333" Grid.Row="6"/>
        <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="Language" VerticalAlignment="Center" Margin="10,0,0,0" FontFamily="Segoe UI" FontSize="17.333" Grid.Row="7"/>
        <TextBlock HorizontalAlignment="Right" TextWrapping="Wrap" Text="{Binding Language}" VerticalAlignment="Center" Margin="0,0,20,0" FontFamily="Segoe UI" FontSize="19.333" Grid.Row="8"/>
        </Grid>
    </Grid>
</DataTemplate>

名称为“ InfoGrid ”的网格设计为当前悬停GridViewItem 的详细信息的叠加容器,叠加层当某些 GridViewItem悬停时,会很好地淡出。所以我将它的Opacity设置为0,寻找一些方法来完成我的设计。(我已经在网站上使用过这么多次设计,但是第一次使用Win8应用程序)

那时我觉得自己被困,似乎不可能。

我倾向于覆盖模板(ItemTemplate&amp; ItemContainerStyle) 它没有用。 ItemTemplate是关于Data的全部,ItemContainerStyle是关于sty的 le,但它们彼此独立,当PointerOver状态打开时,它不能对ItemTemplate中的内容做任何事情,只是改变外部容器的一些无用的属性。

令我困惑的是,为什么Win8 Metro中的GridView不为单个GridViewItem提供 Hover 事件,有什么我需要知道才能完成此操作吗?请提供一些提示。

1 个答案:

答案 0 :(得分:0)

虽然ItemContainerStyle可能包含一些可以帮助您的视觉状态,但在UserControl / ItemTemplate中添加DataTemplate可能会更容易。创建UserControl后,您可以轻松访问其代码隐藏,您可以随时处理各种事件,定义视觉状态以及在这些状态之间转换。您的问题可能是虽然没有可以通过触摸输入处理的悬停事件,因此您应该考虑一些替代方案 - 可能会在点击项目时在详细信息视图中显示您的叠加层,或者在单独的面板中选择网格视图项。请注意,大多数用户无法读取250x250磁贴上方有10行或8 TextBlock的网格。