c# - 工具提示未正确显示

标签 c# wpf xaml textbox tooltip

我是 WPF 的新手。我想在 TextBox 中发生错误时显示自定义工具提示。所以我使用了 Style 如下所示:

<Style x:Key="textBoxInError" TargetType="{x:Type TextBox}">
        <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="true">                   
                <Setter Property="ToolTip">
                    <Setter.Value>
                        <ToolTip Placement="Top">                            
                            <Border Margin="-4,0,-4,-3" Padding="2" Background="Red">
                                <Border.BitmapEffect>
                                    <OuterGlowBitmapEffect></OuterGlowBitmapEffect>
                                </Border.BitmapEffect>
                                <Label Foreground="White" FontWeight="Bold" Content="{Binding RelativeSource={RelativeSource AncestorType={x:Type TextBox}}, Path=(Validation.Errors)[0].ErrorContent}"></Label>
                            </Border>
                        </ToolTip>
                    </Setter.Value>
                </Setter>
            </Trigger>
        </Style.Triggers>
    </Style>

以上代码未在 ToolTip 中显示错误消息。你能在这方面帮助我吗?任何帮助将不胜感激。

最佳答案

您应该使用以下样式 ( msdn ) 更改当前样式:

<Style x:Key="textBoxInError" TargetType="{x:Type TextBox}">
    <Style.Triggers>  
        <Trigger Property="Validation.HasError" Value="true">
            <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
        </Trigger>
    </Style.Triggers>
</Style>

并且您应该为 ToolTip 创建样式:

<Style TargetType="ToolTip">
    <Setter Property="OverridesDefaultStyle" Value="true"/>
    <Setter Property="HasDropShadow" Value="True"/>
    <Setter Property="Placement" Value="Top" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ToolTip">
                <Border Name="Border" Margin="-4,0,-4,-3" Padding="2" Background="Red">
                    <Border.BitmapEffect>
                        <OuterGlowBitmapEffect></OuterGlowBitmapEffect>
                    </Border.BitmapEffect>
                    <ContentPresenter
                        Margin="4" 
                        HorizontalAlignment="Left"
                        VerticalAlignment="Top" 
                        TextElement.Foreground="White" TextElement.FontWeight="Bold"                                      
                        />                                    
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="HasDropShadow" Value="true">
                        <Setter TargetName="Border" Property="CornerRadius" Value="4"/>
                        <Setter TargetName="Border" Property="SnapsToDevicePixels" Value="true"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

使用示例:

<TextBox Text="{Binding MyText, ValidatesOnDataErrors=True, NotifyOnValidationError=True, UpdateSourceTrigger=PropertyChanged}" 
         Style="{StaticResource textBoxInError}"                     
         />

关于c# - 工具提示未正确显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15664465/

相关文章:

c# - Unity分部类不包含定义

wpf - 使用 Linq to Entities 绑定(bind)到 List<T> 时显示组合框的选定值的问题

xaml - 3 Pane 循环滚动面板 - 建议

wpf - 从datagrid中的一行中的选定单元格中删除边框

c# - WPF 像素到桌面像素

xaml - Windows Phone 应用程序中的文本框滚动不起作用

C# WPF DataBinding "Can' t 查找属性"

c# - 减少 C# Forms Control.set_Text(string) 函数中的时间

c# - 来自主项目的引用命名空间

c# - Web 服务在处理线程的同时响应调用者