WPF TextBox 在 MouseOver 上显示插入符号

WPF TextBox show Caret on MouseOver

我正在寻找一种在 IsMouseOver="True" 时在 TextBox 中显示插入符的方法。 here 提到的使用 FocusManager.IsFocusScope="True" 的解决方案似乎不起作用。

有没有一种无需在 TextBox 内部单击即可显示插入符的方法?


MWE:

<Window x:Class="WpfApp11.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Window.Resources>
        <Style BasedOn="{StaticResource {x:Type TextBox}}" TargetType="{x:Type TextBox}">
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="FocusManager.IsFocusScope" Value="True" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
    <Grid>
        <TextBox Width="300" Height="22" Text="Hello World" />
    </Grid>
</Window>

A TextBox 在单击后显示插入符。我希望插入符号在鼠标悬停时显示。

如果要设置焦点,则需要使用FocusedElement(credits):

<Style BasedOn="{StaticResource {x:Type TextBox}}"
       TargetType="{x:Type TextBox}">
    <Style.Triggers>
        <Trigger Property="IsMouseOver"
                 Value="True">
            <Setter Property="FocusManager.FocusedElement"
                    Value="{Binding RelativeSource={RelativeSource Self}}" />
        </Trigger>
    </Style.Triggers>
</Style>

如果您希望插入符号最初位于末尾,请考虑像这样初始化所有文本框 (credits):

<TextBox CaretIndex="{x:Static system:Int32.MaxValue}" ... />

其中 system 定义如下:

<Window xmlns:system="clr-namespace:System;assembly=mscorlib" ... />