如何在自定义 WPF 文本框中显示插入符号

kfo*_*eck 0 .net wpf styles custom-controls wpf-controls

我通过创建自己的自定义控件模板在 WPF 中设计了自己的文本框。但是,我似乎无法让插入符号出现。

这是我的文本框样式:

<Style TargetType="{x:Type TextBox}">
        <Setter Property="SnapsToDevicePixels" Value="True"/>
        <Setter Property="OverridesDefaultStyle" Value="True"/>
        <Setter Property="KeyboardNavigation.TabNavigation" Value="None"/>
        <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
        <Setter Property="AllowDrop" Value="True"/>
        <Setter Property="TextBlock.Foreground" Value="DeepSkyBlue"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TextBox}">
                    <Border
                        Name="border"
                        CornerRadius="0"
                        Padding="2"
                        BorderThickness="1"
                        BorderBrush="DeepSkyBlue">
                        <ContentPresenter
                            HorizontalAlignment="Left" 
                            VerticalAlignment="Top"
                            Content="{TemplateBinding Text}"
                            Name="content"/>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsEnabled" Value="True">
                            <Setter Property="Background" Value="MidnightBlue"/>
                            <Setter Property="BorderBrush" Value="DeepSkyBlue"/>
                            <Setter Property="Foreground" Value="DeepSkyBlue"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
Run Code Online (Sandbox Code Playgroud)

那么我怎样才能让我的插入符号出现呢?我希望它是 MidnightBlue,以便在 DeepSkyBlue 背景上可见。

She*_*dan 6

虽然已向问题作者提供了其问题的解决方案,但该解决方案可能无法解决其他用户的问题。可能导致 a 中的插入符号TextBox消失的另一个原因是当您将TextBox.Background属性设置为{x:Null}或 时Transparent

发生这种情况是因为 WPF 框架将插入符号的颜色设置为与Background属性中设置的颜色相反。由于这两个值没有对立,插入符号颜色设置为Black。这些情况下的解决方案非常简单。

我们可以将Background属性的颜色设置为与插入符号相反的颜色,然后将声明颜色的 alpha 值设置为00。例如,如果您想要一个白色插入符号,则将TextBox.Background属性设置为#00000000(透明黑色),如果您想要一个红色插入符号,则将TextBox.Background属性设置为#0000FFFF(透明青色)等。