【问题标题】:Retrieve the Default Selection Opacity检索默认选择不透明度
【发布时间】:2015-01-01 19:55:55
【问题描述】:

WPF 中的文本选择(文本框等)看起来与其他 UI 工具包的不同,因为 WPF 在其选择矩形的文本上使用半透明覆盖。

SystemColors class 提供用于HighlightColor property 中该矩形的颜色(以及与之相关的其他属性)。但是,该颜色是完全不透明的。因此,颜色必须用作降低的不透明度。

TextBoxBase.SelectionOpacityPasswordBox.SelectionOpacityFlowDocumentPageViewer.SelectionOpacity 上的文档页面建议:

默认为 0.4。

另一方面,this blogpost 说:

SelectionOpacity (...) 默认值为 .6。

无论该默认值是什么,有没有办法从环境中检索与SystemColors.HighlightColor 一起使用的选择不透明度,而不是硬编码任意值(这甚至可能不是最好的非标准高亮颜色的选择)?

【问题讨论】:

  • 投反对票的原因是什么?

标签: wpf systemcolors


【解决方案1】:

不,是的。没有SystemColors.HighlightOpacity - 但应该有。

SelectionOpacity 默认属性值在 WPF 中硬编码为 0.4:http://referencesource.microsoft.com/#PresentationFramework/Framework/System/Windows/Controls/Primitives/TextBoxBase.cs,9716201433499854

我不完全知道这有什么不同(如你所说的 0.6),它似乎在每个支持它的 .NET 中都被硬编码为 0.4(4.0、4.5)。

如果要实际查询SelectionOpacityProperty的默认值,可以这样做:

var prop = TextBoxBase.SelectionOpacityProperty;
var defValue = (double) prop.DefaultMetadata.DefaultValue; // 0.4

【讨论】:

  • 好吧,如果未来的 .NET 版本(甚至另一个 WPF 实现)使用不同的值,它可能会有所不同。只是在我的应用程序中假设该值始终为 0.4,这感觉就像一个等待引起麻烦的错误。 (我考虑接受这个答案,但我通常会先花一些时间,以防其他人有任何进一步的信息。现在 +1。)
  • @O.R.Mapper;从某种意义上说,是的,它是硬编码的,但没有什么能阻止你查询SelectionOpacityProperty 的默认值,我不确定我是否理解问题到底是什么。您不应该在自己的代码中硬编码 0.4。
  • 这实际上是一个好主意,以确保我使用的值始终与默认情况下用于文本框的值相同。我将使用这个解决方案,希望在未来的某个时候,选择不透明度不会成为实际可配置的。
  • @O.R.Mapper:理论上,他们已经可以在运行时通过主题(Aero、Aero2、AeroLite、Classic、Royal、Luna、..)覆盖SelectionOpacity 属性,DefaultValue 不会t 反映这一点,但是,从他们的角度来看,这将是一个糟糕的举动,因为现在他们有 SYstemColors. 密钥用于在整个主题中发生任何变化,但他们没有用于 SelectionOpacity 的密钥。
猜你喜欢
  • 2012-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-19
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多