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 桌面:文本框的背景颜色在鼠标悬停时更改的主要内容,如果未能解决你的问题,请参考以下文章

解决手机端页面的鼠标点击出现蓝色背景

如何保存富文本框的背景颜色及其其他内容

WinUI3如何在桌面应用中实现亚克力窗口效果?

a:悬停在图像周围的背景区域

使用 jQuery 尝试更改文本框的背景颜色但在 wordpress 中不起作用

具有透明背景的 JavaFX 按钮