WPF -错误模板工具提示显示在边框上,但不在文本框中

fsi0uk1n  于 2023-03-24  发布在  其他
关注(0)|答案(1)|浏览(129)

我有一个绑定到整数属性的TextBox控件。它们就像:

<TextBox x:Name="txtInteger"
         Grid.Row="2"
         Grid.Column="0"
         Text="{Binding Path=IntegerValue}"
         Validation.ErrorTemplate="{StaticResource ValidationForNumericValues}"/>

可以预见,ValidationForNumericValues是验证错误模板:

<Window.Resources>
    <ControlTemplate x:Key="ValidationForNumericValues">
        <Grid>
            <Border BorderThickness="1"
                    BorderBrush="Red">
                <Border.ToolTip>
                    <ToolTip Placement="Right"
                             HorizontalOffset="5"
                             VerticalOffset="5"
                             Content="Please enter a number"/>
                </Border.ToolTip>
                <AdornedElementPlaceholder/>
            </Border>
        </Grid>
    </ControlTemplate>
</Window.Resources>

当我在txtInteger中输入一个字母数字值时,红色边框会适时显示,但当鼠标光标位于TextBox中时,我看不到工具提示。只有当光标位于红色边框上方时,它才会显示。
This answer表明DefaultBoxStyle可能与此有关,但删除<Style.../>声明并没有改善情况。
我还尝试使用不同的控件,比如

<Window.Resources>
    <ControlTemplate x:Key="ValidationForNumericValues">
        <Grid>
            <Border BorderThickness="1"
                    BorderBrush="Red">
                <Border.ToolTip>
                    <ToolTip Placement="Right"
                             HorizontalOffset="5"
                             VerticalOffset="5"
                             Content="Please enter a number"/>
                    </ToolTip>
                </Border.ToolTip>
                <TextBlock Text=""
                           Opacity="100"
                           Foreground="Red"
                           HorizontalAlignment="Stretch">
                    <TextBlock.ToolTip>
                        <ToolTip Placement="Right"
                                 HorizontalOffset="10"
                                 VerticalOffset="10"
                                 Content="Please enter a number"/>
                    </TextBlock.ToolTip>
                </TextBlock>
            </Border>
            <AdornedElementPlaceholder/>
        </Grid>
    </ControlTemplate>
</Window.Resources>

这让工具提示显示在TextBox的整个表面上......但我不能通过点击它来设置焦点。我本以为将它放在AdornedElementPlaceholder之前会将它放在TextBox之下,但我猜因为它只有条件地出现,所以它总是出现在上面。
(我还对在Border之前声明的TextBlock和在Border内部声明的AdornedElementPlaceholder做了同样的尝试,为了保存空间,我没有包含它们,结果也是一样的。)
我试过了

<AdornedElementPlaceholder>
    <AdornedElementPlaceholder.ToolTip>
        <ToolTip Placement="Right"
                 HorizontalOffset="5"
                 VerticalOffset="5">
            <TextBlock>Please enter a number</TextBlock>
        </ToolTip>
    </AdornedElementPlaceholder.ToolTip>
</AdornedElementPlaceholder>

但这似乎不会影响TextBoxToolTip属性,只是AdornedElementPlaceholder
我尝试绑定TextBoxToolTip属性,但我不知道如何访问Border的工具提示Content
(In如果相关,我在Visual Studio 2019下使用.NET 5.0项目。
我做错了什么?

ao218c7q

ao218c7q1#

给予你的边框一个透明的背景。当点击测试时,除了边框线之外的任何东西都需要一个背景(或内容)。

<Border BorderThickness="1"
        BorderBrush="Red"
        Background="Transparent">

相关问题