【发布时间】:2014-05-28 07:30:37
【问题描述】:
我正在尝试更改 gridview 项目被选中时的外观。 (之前,我在绑定到包含网格的 ViewModel 对象中使用了一个带有 IsSelected 属性的技巧和一个 bool-to-color 转换器,但我认识到它很糟糕)
为此,我这样做:
<GridView ItemContainerStyle="{StaticResource GridViewItemContainerStyle}" ...> ...
和
<Style x:Key="GridViewItemContainerStyle" TargetType="GridViewItem">
<Setter Property="Background" Value="Red" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="GridViewItem">
<Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Grid.Background)" Storyboard.TargetName="itemGrid">
<DiscreteObjectKeyFrame KeyTime="0" Value="Black"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="SelectionStates">
<VisualState x:Name="UnselectedSwiping"/>
<VisualState x:Name="UnselectedPointerOver"/>
<VisualState x:Name="Selecting"/>
<VisualState x:Name="Selected">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Grid.Background)" Storyboard.TargetName="itemGrid">
<DiscreteObjectKeyFrame KeyTime="0" Value="White"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="SelectedSwiping"/>
<VisualState x:Name="Unselecting"/>
<VisualState x:Name="Unselected"/>
<VisualState x:Name="SelectedUnfocused"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid ... x:Name="itemGrid">
<!-- HERE MY DATA TEMPLATE -->
</Grid>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
当我运行应用程序时,这些项目是黑色的(就像在“正常”状态下一样)。但是选择它们并不会将它们变成白色。我哪里错了?
此外,还有一种方法可以设置“ItemContainerStyle”,而无需“覆盖”“ItemTemplate”???
【问题讨论】:
标签: xaml windows-runtime winrt-xaml windows-8.1