1

我有 aListViewDataTemplate用 2修改了它TextBlocks

第一个TextBlock包含Heading,第二个包含Sub-Heading

TextBlocks用不同的颜色设计了2。

ListViewItem这是普通视图中的示例。

普通的

以下是“已选”视图的示例ListViewItem

已选中

所以我的问题是如何更改选定视图中的Foreground颜色?希望在 xaml 中做到这一点。我尝试设置不同的画笔,它们适用于未明确设置样式的项目。TextBlocks

不知道如何处理这种情况。

4

3 回答 3

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>
于 2013-04-12T18:48:14.560 回答
1

你不需要玩视觉状态。

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

例子:

    <!-- 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 默认画笔名称和值

于 2013-04-19T15:10:04.567 回答
0

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

Metro App ListView SelectedItem Selected VisualState

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

于 2013-06-16T13:14:17.637 回答