更改列表框中所选项目的背景颜色
本文关键字:项目 背景 颜色 选项 列表 | 更新日期: 2023-09-27 18:35:02
首先,我在这里和网络上搜索,我找到了很多解决方案,如何更改WPF中列表框中所选项目的背景颜色,但不知道如何在Windows应用商店应用程序中执行此操作。这个框架是不同的,我无法找到任何解决方案。
我使用这个:页面末尾的 http://social.msdn.microsoft.com/Forums/windowsapps/en-US/91575930-2058-413a-99de-f3b31c74dfd9/change-itemtemplate-forground-when-listbox-is-focused?forum=winappswithcsharp 是一个很好的解决方案,但他像这样设置项目板: ItemTemplate="{StaticResource DataTemplate1}"
但是我的列表框有数据板,所以我不知道如何通过 setter 或任何其他方式设置 ItemTemplate 样式。
我的列表框:
<ListBox x:Name="lbMenu" ItemsSource="{Binding MyDataForLunchGrid}" Tapped="lbMenzaMenu_Tapped" Style="{StaticResource ListBoxStyle1}">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="Style" Value="{StaticResource ListBoxItemStyle1}"/>
</Style>
</ListBox.ItemContainerStyle >
<ListBox.ItemTemplate >
<DataTemplate>
<Grid>
<TextBlock Foreground="#FF19536E" x:Name="tbMenu" Text="{Binding launchItemName}"/>
<TextBlock x:Name="tbMenuNumber" Text="{Binding launchNumber}"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
现在,当我按下列表框中的任何项目时,它具有深紫色(默认(颜色,看起来很可怕。
如何更改列表框中所选项目的背景色
我想你想改变你的ItemContainerStyle
的定义. 尝试这样的事情:
<ListBox ItemContainerStyle="{StaticResource ListBoxItemStyle1}" ...
资源"ListBoxItemStyle1"应包含ListBoxItem
的控件模板:
<Style TargetType="ListBoxItem" x:Name="ListBoxItemStyle1">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<!-- template here -->
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
控件模板依次定义"选定"视觉状态。 在您链接的页面中,"ListBoxItemStyle1"定义该视觉状态如下(黄色背景(:
<VisualState x:Name="Selected">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="InnerGrid">
<DiscreteObjectKeyFrame KeyTime="0" Value="Yellow"/>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
<DiscreteObjectKeyFrame KeyTime="0" Value="Green"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
请注意,默认情况下,ListBoxItem 的"选定"状态使用用户当前的"重音笔刷"作为其背景,如下所示。 这可能是你看到的深紫色的来源。 (您可以在 Windows Phone SDK 文件夹中找到所有默认样式和模板。
<VisualState x:Name="Selected">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentContainer" Storyboard.TargetProperty="Foreground">
<DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneAccentBrush}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
您可以根据需要修改此设置 - 从 Windows SDK 或链接页面复制粘贴默认样式,并将背景和其他属性设置为所需的任何属性。
有关控件模板和视觉状态的更多背景信息,请参阅 使用 ControlTemplate 自定义现有控件的外观。
我只是遇到了同样的问题。我想在选择项目时摆脱默认的蓝紫色。即使有这篇文章作为帮助,我也花了一段时间才弄清楚我必须更改ItemContainerStyle
中的哪些VisualState
。所以我想我就把它贴在这里。这就是我所做的:
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="SelectionStates">
<VisualState x:Name="SelectedPointerOver">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="InnerGrid">
<DiscreteObjectKeyFrame KeyTime="0" Value="[NOT-PURPLE-BLUE-ANYMORE]">
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ListBoxItemSelectedForegroundThemeBrush}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>