WPF - 如何更改鼠标指针颜色

8
我正在尝试更改鼠标指针在悬停在文本框上时的颜色,以便在暗色背景上更易于识别。

Mouse cursor color comparison.

我知道如何更改四个东西:
  1. 文本框背景颜色 (.Background)
  2. 文本框前景颜色 (.Foreground)
  3. 文本框插入符颜色 (.CaretBrush)
  4. 鼠标光标图像 (Mouse.OverrideCursorthis.Cursor)
我只是不能更改鼠标光标的颜色。
我在另一个问题中发现了一种完全改变鼠标光标为自定义光标的方法,该问题是由其他人发布的:“WPF 中的自定义光标?”。但这似乎是过度设计,只是想要改变颜色,以便我可以实际看到鼠标在哪里。
如果文本框具有黑色背景,则鼠标光标颜色会自动更改为白色。但如果它具有不完全黑色的深色背景,则不会自动更改。
2个回答

9

很简单。尝试更改CaretBrush颜色。请参见以下示例代码。

<TextBox Text="This is some random text" CaretBrush="Blue" />

编辑:

如果没有定义自定义光标,您无法更改鼠标颜色,但可以更改其类型。请参见以下示例。

<Grid>
    <TextBox Width="70" Height="20" CaretBrush="IndianRed" Text="TEST">
        <TextBox.Style>
            <Style TargetType="TextBox">
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Cursor" Value="Pen" />
                    </Trigger>
                    <Trigger Property="IsMouseOver" Value="False">
                        <Setter Property="Cursor" Value="Arrow" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </TextBox.Style>
    </TextBox>
</Grid>

如果您想更改光标类型,请查看此帖子WPF中的自定义光标?


我可以改变那个。实际上,我已经将其更改为白色。但它只影响文本框中的闪烁光标,而不是鼠标悬停光标。如果两者都改变了,那就太好了,这是最有意义的。现在,当鼠标进入文本框时,由于很难看到,我会迷失我的鼠标光标。 - XSapien
可以做到。但我还没有尝试过。无论如何,试一试吧 https://dev59.com/iXVD5IYBdhLWcg3wOo9h - ViVi
是的。我想这是一个不错的方法。当我有空闲时间时,我会尝试创建自定义光标。但在正常情况下,这并不是必需的,因为整个项目中所有文本框都将具有相同的样式。因此,大多数情况下只需要更改CaretBrush。 - ViVi
1
我编辑了我原来问题中可以更改的4件事情的列表。我添加了与我列出的每个事物相关联的属性。由于我想要更改鼠标光标,我有两个选项:OverrideCursor和Cursor。“主要区别在于Mouse.OverrideCursor将为整个应用程序设置鼠标光标,而this.Cursor仅为该特定FrameworkElement设置光标。”使用可用光标的示例: Mouse.OverrideCursor = Cursors.IBeam; this.Cursor = Cursors.IBeam; - XSapien
在 XAML 中像编辑中使用触发器可能是比 C# 路线更好的方式(例如 Mouse.OverrideCursorthis.Cursor)。然后光标也可以像这样在 XAML 中作为资源添加:<Cursor x:Key="MyWhiteIBeam">C:\Users\Images\IBeamWhite.cur\</Cursor>。我希望能找到可用于 Visual Studio 的标准光标的 .cur 文件并更改颜色,但没有这样的运气。 - XSapien
显示剩余3条评论

1
您可以使用WPF的CaretBrush属性更改光标的颜色。 例如:
<Style x:Key="TextBoxStyle" TargetType="TextBox">            
        <Style.Triggers>
            <Trigger Property="IsKeyboardFocusWithin" Value="True">
                <Setter Property="CaretBrush" Value="White"/>
            </Trigger>
        </Style.Triggers>
</Style>

如果您愿意,可以添加自己的触发条件。


它对我有效。应该标记为正确答案。 - user38931

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接