Metro App Change ListView所选项目内容前景

时间:2013-04-12 17:47:45

标签: xaml listview microsoft-metro winrt-xaml

我有一个ListView,并使用DataTemplate修改了TextBlocks

第一个TextBlock包含标题,第二个子标题

我用不同的颜色设置2 TextBlocks的样式。

以下是普通视图中ListViewItem的示例。

Normal

以下是已选择视图中ListViewItem的示例。

Selected

所以我的问题是如何更改所选视图中Foreground的{​​{1}}颜色?希望在xaml中这样做。我尝试过设置不同的画笔,这些画笔适用于未明确定型的项目。

不确定如何处理这种情况。

3 个答案:

答案 0 :(得分:2)

您可以使用视觉状态。

<ListView>
    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="*"/>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>

                <TextBlock x:Name="txtOne" Grid.Row="0" Foreground="Green"/>
                <TextBlock x:Name="txtTwo" Grid.Row="1" Foreground="Gray"/>
                <VisualStateManager.VisualStateGroups>
                    <VisualStateGroup x:Name="SelectionStates">
                        <VisualState x:Name="Unselected"/>
                        <VisualState x:Name="Selected">
                            <Storyboard>
                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName="txtOne" Storyboard.TargetProperty="Foreground">
                                    <DiscreteObjectKeyFrame KeyTime="0" Value="Red"/>
                                </ObjectAnimationUsingKeyFrames>
                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName="txtTwo" Storyboard.TargetProperty="Foreground">
                                    <DiscreteObjectKeyFrame KeyTime="0" Value="Yellow"/>
                                </ObjectAnimationUsingKeyFrames>
                            </Storyboard>
                        </VisualState>
                    </VisualStateGroup>
                </VisualStateManager.VisualStateGroups>
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

答案 1 :(得分:1)

你不需要玩视觉状态。

在您的ResourceDictionary中,为这些画笔设置一个值&#34; ListBoxItemSelectedBackgroundThemeBrush&#34;,&#34; ListBoxItemSelectedPointerOverBackgroundThemeBrush&#34;,&#34; ListBoxFocusBackgroundThemeBrush&#34;。它将覆盖应用程序的默认画笔。

示例:

    <!-- Overrides default ListBox brushes -->
<SolidColorBrush x:Key="ListBoxItemSelectedBackgroundThemeBrush" Color="{StaticResource GreenColor}" />
<SolidColorBrush x:Key="ListBoxItemSelectedPointerOverBackgroundThemeBrush" Color="{StaticResource LightGreenColor}" />
<SolidColorBrush x:Key="ListBoxFocusBackgroundThemeBrush" Color="Transparent" />

在WinRt中开发时,这是一个有用的链接,它引用了刷子名称,用于winRt的默认控件。

WinRt default brushes names and values

答案 2 :(得分:0)

感谢一些开箱即用的研究和思考,找到了一个合适的解决方案:

Metro App ListView SelectedItem Selected VisualState

我可以看到这对于其他一些场景也很方便。