我有一个ListView
,并使用DataTemplate
修改了TextBlocks
。
第一个TextBlock
包含标题,第二个子标题。
我用不同的颜色设置2 TextBlocks
的样式。
以下是普通视图中ListViewItem
的示例。
以下是已选择视图中ListViewItem
的示例。
所以我的问题是如何更改所选视图中Foreground
的{{1}}颜色?希望在xaml中这样做。我尝试过设置不同的画笔,这些画笔适用于未明确定型的项目。
不确定如何处理这种情况。
答案 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的默认控件。
答案 2 :(得分:0)
感谢一些开箱即用的研究和思考,找到了一个合适的解决方案:
Metro App ListView SelectedItem Selected VisualState
我可以看到这对于其他一些场景也很方便。