WinUI 3.0 桌面:文本框的背景颜色在鼠标悬停时更改
Posted
技术标签:
【中文标题】WinUI 3.0 桌面:文本框的背景颜色在鼠标悬停时更改【英文标题】:WinUI 3.0 Desktop: Background color of TextBox gets changed on mouse over 【发布时间】:2021-12-12 22:15:07 【问题描述】:我已经开始使用微软的新 UI 技术 WinUI 3。
我有一个TextBox
,我想将其设置为只读,即IsReadOnly="True"
(备注:用户仍然可以从中复制内容,这就是我不想将其设置为禁用的原因,即IsEnabled="False"
.)
将其设置为IsReadOnly="True"
时,我注意到TextBox
仍保持其默认的白色背景。我想改变它,以避免让用户点击它,因为他们认为可以改变它的内容。
我决定为背景设置某种浅灰色:
<TextBox IsReadOnly="True" Background="SlateGray" Text="The content..."></TextBox>
这按预期工作,但有一个问题:一旦鼠标悬停在TextBox
上,背景就会变回白色。当鼠标不再在TextBox
上时,颜色变回指定的灰色背景色。
在 WPF 中,我会尝试一些 DataTrigger 以保持格式设置,但 WinUI 中没有 DataTriggers(还没有?)。
我还尝试在TextBox
上设置其他与颜色相关的属性,以查看它们是否与上述行为有关,但设置这些并没有改变任何东西:
FocusVisualPrimaryBrush, FocusVisualSecondaryBrush, SelectionHighlightColor, SelectionHighlightColorWhenNotFocused
当鼠标悬停在只读的“文本框”上时,我愿意接受各种关于如何保持背景颜色的建议,谢谢。
【问题讨论】:
doc 表示对于大多数主题它应该是“灰色的”。您有任何可能重置颜色的事件吗?或继承的 css 样式,如textbox:hover
?
【参考方案1】:
您可以覆盖一些主题资源:
<TextBox IsReadOnly="True" Background="SlateGray" Text="The content...">
<TextBox.Resources>
<SolidColorBrush x:Key="TextControlBackgroundPointerOver" Color="SlateGray" />
<SolidColorBrush x:Key="TextControlBackgroundFocused" Color="SlateGray" />
</TextBox.Resources>
</TextBox>
【讨论】:
非常感谢!您能否指出您的方法是如何找到您在回答中提到的资源的名称/键?我在哪里可以看到这些资源会影响 TextBox 的背景颜色?我猜在主题的代码中,但是我在哪里找到它以及如何在主题代码中找到“文本框相关资源”?以上是关于WinUI 3.0 桌面:文本框的背景颜色在鼠标悬停时更改的主要内容,如果未能解决你的问题,请参考以下文章