WPF - ErrorTemplate 工具提示显示在边框上,但未显示 TextBox

WPF - ErrorTemplate tooltip showing on the Border but not one the TextBox

提问人:Jean-David Lanz 提问时间:3/23/2023 更新时间:4/4/2023 访问量:67

问:

我有 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>

当我在 中输入字母数字值时,红色边框会适当显示出来,但是当鼠标光标位于 .它仅在光标位于红色边框上方时显示。txtIntegerTextBox

这个答案表明可能与它有关,但删除声明并没有改善事情。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>

这样一来,工具提示就会显示在 的整个表面上...但我无法通过单击它来设置焦点。我理解阻止它;我本来以为把它放在 之前会把它放在 下面,但我想因为它只是有条件地出现,所以它总是出现在上面。TextBoxTextBlockAdornedElementPlaceholderTextBox

(我也尝试过对 之前声明的 和 内部 做同样的事情,为了节省空间,我没有包括它,并且得到了相同的结果。TextBlockBorderAdornedElementPlaceholderBorder

我试过了

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

但这似乎并不影响 的属性,只是 的属性。TextBoxToolTipAdornedElementPlaceholder

我试图绑定 的属性,但我不知道如何访问 的工具提示。TextBoxToolTipBorderContent

(如果相关,我在 Visual Studio 2019 下使用 .NET 5.0 项目。

我做错了什么?

WPF 验证 XAML 数据绑定 工具提示

评论


答:

1赞 Connor 3/23/2023 #1

为您的边框提供透明背景。在命中测试时,需要背景(或内容)才能拾取边界以外的任何内容。

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

评论

0赞 Jean-David Lanz 3/27/2023
像魅力一样工作,非常感谢!(太简单了,但我在其他例子中没有看到过。