设置背景颜色或 WPF (4.0) 列表框 - Windows 8

2024-01-10

我试图将选定的 ListBoxItem 的背景颜色设置为白色而不是系统颜色。我已经阅读了我可以在此处找到的内容,并遵循或相信遵循了那里的建议(更改选定列表框项目的背景颜色 https://stackoverflow.com/questions/2138200/change-background-color-for-selected-listbox-item/2138237#2138237, WPF当列表框失去焦点时如何更改列表框所选项目文本颜色 https://stackoverflow.com/questions/3111763/wpf-how-to-change-the-listbox-selected-item-text-color-when-the-list-box-loses-f, 更改选定且未聚焦的列表框样式,使其不灰显 https://stackoverflow.com/questions/698830/change-selected-and-unfocused-listbox-style-to-not-be-grayed-out, 和别的)。

所有似乎都通过将所选项目的HighlightBrush和ControlBrush设置为透明来解决问题。我有以下 XAML,它正确设置了字体颜色,但无论画笔设置如何,背景都是默认的透明蓝色。我仍然是一个 WPF 菜鸟,所以我一定错过了一些简单的东西。

<ListBox Width="Auto" Height="Auto" Grid.Column="0" BorderThickness="0" Background="#FFF3F3F3" xmlns:sys="clr-namespace:System;assembly=mscorlib">
    <ListBox.ItemsSource>
       <x:Array Type="{x:Type sys:String}">
          <sys:String>String 1</sys:String>
          <sys:String>String 2</sys:String>
          <sys:String>String 3</sys:String>
          <sys:String>String 4</sys:String>
       </x:Array>
    </ListBox.ItemsSource>
    <ListBox.ItemContainerStyle>
       <Style TargetType="ListBoxItem" BasedOn="{StaticResource {x:Type ListBoxItem}}">
          <Style.Resources>
             <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
             <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
          </Style.Resources>
          <Setter Property="HorizontalContentAlignment" Value="Stretch" />
          <Setter Property="FontSize" Value="16"/>
          <Setter Property="Foreground" Value="#999999"/>
          <Style.Triggers>
             <Trigger Property="IsSelected" Value="True" >
                <Setter Property="Background" Value="White" />
                <Setter Property="Foreground" Value="Black" />
             </Trigger>
          </Style.Triggers>
       </Style>
    </ListBox.ItemContainerStyle>
    <ListBox.ItemTemplate>
       <DataTemplate>
          <TextBlock Text="{Binding}" HorizontalAlignment="Right" Margin="0,0,8,0" Background="Transparent"/>
       </DataTemplate>
    </ListBox.ItemTemplate>
 </ListBox>

我将不胜感激任何朝着正确方向的推动。

EDIT:

在阅读第一个答案后,它对他们进行了轻微的更改,我将我在 Windows 8 计算机上开发的应用程序并在 Windows 7 VM 中执行它,它按预期工作。您是否知道需要进行哪些更改才能使其在 Windows 8 计算机和 Windows 7 计算机上运行?


这些帖子对于 Windows-8 来说已经过时了。

在 Windows-8 中,出于某种原因,微软不希望人们编辑他们的默认值Style太容易了或者有什么Brush超越。

ListBoxItem默认StyleVS 有这个选择触发器:

<MultiTrigger>
  <MultiTrigger.Conditions>
    <Condition Property="Selector.IsSelectionActive"
                Value="False" />
    <Condition Property="IsSelected"
                Value="True" />
  </MultiTrigger.Conditions>
  <Setter TargetName="Bd"
          Property="Background"
          Value="#3DDADADA" />
  <Setter TargetName="Bd"
          Property="BorderBrush"
          Value="#FFDADADA" />
</MultiTrigger>
<MultiTrigger>
  <MultiTrigger.Conditions>
    <Condition Property="Selector.IsSelectionActive"
                Value="True" />
    <Condition Property="IsSelected"
                Value="True" />
  </MultiTrigger.Conditions>
  <Setter TargetName="Bd"
          Property="Background"
          Value="#3D26A0DA" />
  <Setter TargetName="Bd"
          Property="BorderBrush"
          Value="#FF26A0DA" />
</MultiTrigger>

选择状态的触发器不再应用我们可以轻松覆盖的画笔,而是静态颜色。因此,要修改它,您将需要派生模板并修改那里的触发器。到White

这是 VS2012 Windows-8 给出的完整样式ListBoxItem

<Style x:Key="ListBoxItemStyle1"
       TargetType="{x:Type ListBoxItem}">
  <Setter Property="SnapsToDevicePixels"
          Value="True" />
  <Setter Property="Padding"
          Value="4,1" />
  <Setter Property="HorizontalContentAlignment"
          Value="{Binding HorizontalContentAlignment,
                          RelativeSource={RelativeSource FindAncestor,
                                                         AncestorLevel=1,
                                                         AncestorType={x:Type ItemsControl}}}" />
  <Setter Property="VerticalContentAlignment"
          Value="{Binding VerticalContentAlignment,
                          RelativeSource={RelativeSource FindAncestor,
                                                         AncestorLevel=1,
                                                         AncestorType={x:Type ItemsControl}}}" />
  <Setter Property="Background"
          Value="Transparent" />
  <Setter Property="BorderBrush"
          Value="Transparent" />
  <Setter Property="BorderThickness"
          Value="1" />
  <Setter Property="FocusVisualStyle">
    <Setter.Value>
      <Style>
        <Setter Property="Control.Template">
          <Setter.Value>
            <ControlTemplate>
              <Rectangle Margin="2"
                         SnapsToDevicePixels="True"
                         Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"
                         StrokeDashArray="1 2"
                         StrokeThickness="1" />
            </ControlTemplate>
          </Setter.Value>
        </Setter>
      </Style>
    </Setter.Value>
  </Setter>
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type ListBoxItem}">
        <Border x:Name="Bd"
                Background="{TemplateBinding Background}"
                BorderBrush="{TemplateBinding BorderBrush}"
                BorderThickness="{TemplateBinding BorderThickness}"
                Padding="{TemplateBinding Padding}"
                SnapsToDevicePixels="True">
          <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                            VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                            Content="{TemplateBinding Content}"
                            ContentStringFormat="{TemplateBinding ContentStringFormat}"
                            ContentTemplate="{TemplateBinding ContentTemplate}"
                            SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
        </Border>
        <ControlTemplate.Triggers>
          <MultiTrigger>
            <MultiTrigger.Conditions>
              <Condition Property="IsMouseOver"
                         Value="True" />
            </MultiTrigger.Conditions>
            <Setter TargetName="Bd"
                    Property="Background"
                    Value="#1F26A0DA" />
            <Setter TargetName="Bd"
                    Property="BorderBrush"
                    Value="#A826A0DA" />
          </MultiTrigger>
          <MultiTrigger>
            <MultiTrigger.Conditions>
              <Condition Property="Selector.IsSelectionActive"
                         Value="False" />
              <Condition Property="IsSelected"
                         Value="True" />
            </MultiTrigger.Conditions>
            <Setter TargetName="Bd"
                    Property="Background"
                    Value="#3DDADADA" />
            <Setter TargetName="Bd"
                    Property="BorderBrush"
                    Value="#FFDADADA" />
          </MultiTrigger>
          <MultiTrigger>
            <MultiTrigger.Conditions>
              <Condition Property="Selector.IsSelectionActive"
                         Value="True" />
              <Condition Property="IsSelected"
                         Value="True" />
            </MultiTrigger.Conditions>
            <Setter TargetName="Bd"
                    Property="Background"
                    Value="#3D26A0DA" />
            <Setter TargetName="Bd"
                    Property="BorderBrush"
                    Value="#FF26A0DA" />
          </MultiTrigger>
          <Trigger Property="IsEnabled"
                   Value="False">
            <Setter TargetName="Bd"
                    Property="TextElement.Foreground"
                    Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" />
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

如果您将这些触发器修改为:

<MultiTrigger>
  <MultiTrigger.Conditions>
    <Condition Property="Selector.IsSelectionActive"
                Value="False" />
    <Condition Property="IsSelected"
                Value="True" />
  </MultiTrigger.Conditions>
  <Setter TargetName="Bd"
          Property="Background"
          Value="White" />
  <Setter TargetName="Bd"
          Property="BorderBrush"
          Value="White" />
</MultiTrigger>
<MultiTrigger>
  <MultiTrigger.Conditions>
    <Condition Property="Selector.IsSelectionActive"
                Value="True" />
    <Condition Property="IsSelected"
                Value="True" />
  </MultiTrigger.Conditions>
  <Setter TargetName="Bd"
          Property="Background"
          Value="White" />
  <Setter TargetName="Bd"
          Property="BorderBrush"
          Value="White" />
</MultiTrigger>

你的问题应该得到解决。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设置背景颜色或 WPF (4.0) 列表框 - Windows 8 的相关文章

  • 查找哪些页面不再与写入时复制共享

    假设我在 Linux 中有一个进程 我从中fork 另一个相同的过程 后forking 因为原始进程将开始写入内存 Linux写时复制机制将为进程提供与分叉进程使用的不同的唯一物理内存页 在执行的某个时刻 我如何知道原始进程的哪些页面已被写
  • 迭代变量并查找特定类型实例的技术

    我想迭代进程中内存中的变量 通过插件动态加载 并查找特定类型的实例 以前我可以找到特定类型 或内存中的所有类型 我可以创建类型的实例 我可以获取作为不同类型的字段包含的实例 但我无论如何都不知道只是 搜索 特定类型的实例 一种方法是使用 W
  • C#动态支持吗?

    看完之后这个帖子 https stackoverflow com questions 2674906 when should one use dynamic keyword in c sharp 4 0k和链接 我还有 2 个问题 问题 1
  • 如何创建可以像 UserControl 一样编辑的 TabPage 子类?

    我想创建一个包含一些控件的 TabPage 子类 并且我想通过设计器来控制这些控件的布局和属性 但是 如果我在设计器中打开子类 我将无法像在 UserControl 上那样定位它们 我不想创建一个带有 UserControl 实例的 Tab
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • 如何从 C# 控制器重定向到外部 url

    我使用 C 控制器作为网络服务 在其中我想将用户重定向到外部网址 我该怎么做 Tried System Web HttpContext Current Response Redirect 但没有成功 使用控制器的重定向 http msdn
  • ASP MVC:服务应该返回 IQueryable 的吗?

    你怎么认为 你的 DAO 应该返回一个 IQueryable 以便在你的控制器中使用它吗 不 您的控制器根本不应该处理任何复杂的逻辑 保持苗条身材 模型 而不是 DAO 应该将控制器返回给视图所需的所有内容 我认为在控制器类中看到查询 甚至
  • 如何从网站下载 .EXE 文件?

    我正在编写一个应用程序 需要从网站下载 exe 文件 我正在使用 Visual Studio Express 2008 我正在使用以下代码 private void button1 Click object sender EventArgs
  • 在非活动联合成员上使用“std::addressof”是否定义明确[重复]

    这个问题在这里已经有答案了 下面的代码是尝试实现constexpr的版本offsetof在 C 11 中 它可以在 gcc 7 2 0 和 clang 5 0 0 中编译 这取决于申请std addressof工会非活跃成员的成员 这是明确
  • Azure 事件中心 - 按顺序接收事件

    我使用下面的代码从 Azure Event Hub 接收事件 https learn microsoft com en us azure event hubs event hubs dotnet framework getstarted s
  • 基于xsd模式生成xml(使用.NET)

    我想根据我的 xsd 架构 cap xsd 生成 xml 文件 我找到了这篇文章并按照说明进行操作 使用 XSD 文件生成 XML 文件 https stackoverflow com questions 6530424 generatin
  • 无法将类型“System.IO.Stream”隐式转换为“Java.IO.InputStream”

    我提到了一些类似的问题 但没有一个涉及IO 当我使用时 我在java中使用了相同的代码Eclipse 那次就成功了 但现在我尝试在中使用这段代码Mono for Android C 它不起作用 我正在尝试运行此代码来创建一个InputStr
  • 为什么我不应该对不是由 malloc() 分配的变量调用 free() ?

    我在某处读到 使用它是灾难性的free删除不是通过调用创建的对象malloc 这是真的 为什么 这是未定义的行为 永远不要尝试它 让我们看看当您尝试时会发生什么free 自动变量 堆管理器必须推断出如何获取内存块的所有权 为此 它要么必须使
  • 通过 NHibernate 进行查询,无需 N+1 - 包含示例

    我有一个 N 1 问题 我不知道如何解决它 可以在这个问题的底部找到完全可重复的样本 因此 如果您愿意 请创建数据库 设置 NUnit 测试和所有附带的类 并尝试在本地消除 N 1 这是我遇到的真实问题的匿名版本 众所周知 这段代码对于帮助
  • 在 C 中使用 GNU automake 中的解析器

    我是 GNU autotools 的新手 在我的项目中使用了 lex 和 yacc 解析器 将它们作为 makefile am 中的源代码会产生以下错误 配置 in AC CHECK PROGS YACC bison yacc none i
  • 是否可以有一个 out ParameterExpression?

    我想定义一个 Lambda 表达式out范围 有可能做到吗 下面是我尝试过的 C Net 4 0 控制台应用程序的代码片段 正如您在 procedure25 中看到的 我可以使用 lambda 表达式来定义具有输出参数的委托 但是 当我想使
  • 运算符“==”不能应用于“int”和“string”类型的操作数

    我正在编写一个程序 我想到了一个数字 然后计算机猜测了它 我一边尝试一边测试它 但我不断收到不应该出现的错误 错误是主题标题 我使用 Int Parse 来转换我的字符串 但我不知道为什么会收到错误 我知道它说 不能与整数一起使用 但我在网
  • 我在在线程序挑战编译器中遇到演示错误

    include
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检

随机推荐

  • Spinner 项目的自定义布局

    我在警报对话框中有一个微调器 我想减少微调项目之间的填充 因此我实现了以下内容 spinner row xml
  • Javascript 使用 Genie 效果最小化

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我想最小化
  • 地图函数返回的列表在使用一次后消失[重复]

    这个问题在这里已经有答案了 我是Python新手 我正在使用 Python 3 3 2 我很难弄清楚为什么以下代码会给我一个错误 strList 1 2 3 intList map int strList largest max intLi
  • MVC4 - 有没有办法将根路由到“正常”未处理的 html 页面?

    我有一个 MVC4 应用程序 但我主要将它用于 WebAPI 部分 我想要一个 普通的旧 HTML 文件发送回用户 然后将使用 KnockoutJS 或 KendoUI 从 webapi 控制器中提取 JSON 我知道我可以这样做 rout
  • Java 可以用来确定下载的持续时间吗?

    只是问一下 你会如何做这件事 我知道有一些方法可以获取总体百分比来通知用户下载进度 但我不知道如何在一段时间内执行类似的操作 例如 下载完成所需时间 5 分钟 我所知道的就是百分比 写出写入的字节 然后将其除以长度 然后将其转换为百分比 如
  • android 服务 onBind SecurityException

    我不知道为什么但是在一些设备我的服务不允许绑定 java lang RuntimeException Unable to create application mypackage MyApplication java lang Securi
  • Ruby NET::HTTP 在正文之前读取标头(没有 HEAD 请求)?

    我使用 Net HTTP 和 Ruby 来抓取 URL 我不想抓取流音频 例如 http listen2 openstream co 334 http listen2 openstream co 334 事实上我只想抓取Html内容 所以没
  • Apache mod-auth-mysql 与 phpass 加密密码 (Wordpress)

    我需要对 WordPress 主站点之外的某些网页进行密码保护 用户更愿意使用他们在 WordPress 中已有的用户名和密码 显而易见的解决方案似乎是使用 Apace 模块进行基于 Mysql 的身份验证 mod auth mysql 然
  • HTML 输入数字步骤无需验证

    在 HTML 中 您可以添加step属性为数字类型的输入 我想要这个是因为我喜欢它如何通过仅按向上 向下键来简化用户的输入 我发现此属性的另一个功能是 它强制用户停留在该间隔内 HTML 通过验证来实现这一点 您可以手动输入任何值 但它不会
  • jQuery 选择器中的通配符

    我正在尝试使用通配符来获取 id 以 jander 开头的所有元素的 id 我试过 jander jander 但它不起作用 我知道我可以使用元素的类来解决它 但也可以使用通配符 div div div div 要获取所有以 jander
  • achartengine x 轴标签与值相比发生偏移

    我注意到我的时间表的 Xlabel 与 X 不同步 价值观 这些点应该位于标签的正上方 在左侧 可以 但是它向右移动 我不知道如何解决这个问题 我得到什么 http tinypic com r 2uqj905 7 http tinypic
  • Mysql:不允许从函数返回结果集

    我写了一个函数但收到此错误不允许从函数返回结果集 DELIMITER CREATE FUNCTION getTestFunction p ParentID int p ListName nvarchar 50 p Type nvarchar
  • matlab中识别相邻像素

    我们假设 A 是 1 1 1 1 1 1 1 2 2 3 3 3 4 4 2 2 3 3 4 4 2 2 2 3 4 4 4 4 3 3 5 5 5 5 5 5 我需要识别与特定强度值相邻的所有数字 例如 强度 1 3 和 4 与强度值 2
  • 从自定义路径预加载 env 文件

    我试图在节点应用程序启动时预加载 env 文件 我有以下配置 但每当我运行时npm run start dev我收到错误 scripts lint tslint project tsconfig json build tsc prestar
  • 如何调整 Altair 中的比例范围?

    当使用 Altair 绘制一组图时 我无法将所有轴调整到相同的比例 如下所示 class list c CS m c CS s c SC m c SC s t CS m t CS s t SC m t SC s list of plots
  • 限制 ruby​​ 文件流的速率

    我正在开发一个项目 该项目涉及将 Flash 视频文件从多个地理分布的节点上传到 S3 存储桶 每个视频文件约为 2 3mb 我们每十分钟仅发送一个文件 每个节点 但是我们消耗的带宽需要将速率限制在 20k s 因为这些节点将流媒体传输到C
  • linux 查找正则表达式

    我在使用正则表达式时遇到问题find命令 可能我不明白如何在命令行上转义 为什么这些不一样 find regex 1234567890 find regex digit bash Ubuntu 你应该看看 regextype的论证find
  • 如何使第一个网格项目跨度为 100%?

    我有以下桌面版 它创建了 4 个相等的列 全部为 25 footer inner display grid grid template columns repeat 4 1fr div class footer inner div One
  • 正则表达式检测双花括号之间的文本

    使用正则表达式 我想检测开始和结束双大括号之间的文本 字符串 并且它应该检测任何内部大括号以及文本 例如 detect this and this as well text but text does not ends here so it
  • 设置背景颜色或 WPF (4.0) 列表框 - Windows 8

    我试图将选定的 ListBoxItem 的背景颜色设置为白色而不是系统颜色 我已经阅读了我可以在此处找到的内容 并遵循或相信遵循了那里的建议 更改选定列表框项目的背景颜色 https stackoverflow com questions