Material 设计和 IntegerUpDown 工具提示以显示错误

Material Design and IntegerUpDown Tooltip to Display Error

我在 WPF 项目中使用 MaterialDesign 和 Xceed IntegerUpDown 控件。当鼠标悬停在控件上时,我试图将与 updown 控件关联的错误显示为工具提示。

我已经通过使用以下全局样式使其与 TextBoxes 和 TextBlocks 一起工作:

<Style TargetType="{x:Type TextBox}" 
       BasedOn="{StaticResource CustomizedMaterialDesignTextBox}" >
    <Setter Property="Margin" Value="5"/>
    <Setter Property="VerticalAlignment" Value="Center"/>

    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="True">
            <Setter Property="ToolTip">
                <Setter.Value>
                    <ToolTip DataContext="{Binding RelativeSource={RelativeSource Self}, Path=PlacementTarget}"
                             Background="{DynamicResource ValidationErrorBrush}">
                        <ItemsControl ItemsSource="{Binding Path=(Validation.Errors)}"
                                      DisplayMemberPath="ErrorContent"/>
                    </ToolTip>
                </Setter.Value>
            </Setter>
        </Trigger>
    </Style.Triggers>
</Style>

但是当我尝试如下将其适配到 updown 控件时,没有显示工具提示:

<Style TargetType="{x:Type xctk:IntegerUpDown}">
    <Setter Property="Margin" Value="5"/>

    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="True">
            <Setter Property="ToolTip">
                <Setter.Value>
                    <ToolTip DataContext="{Binding RelativeSource={RelativeSource Self}, Path=PlacementTarget}"
                             Background="{DynamicResource ValidationErrorBrush}">
                        <ItemsControl ItemsSource="{Binding Path=(Validation.Errors)}"
                                      DisplayMemberPath="ErrorContent"/>
                    </ToolTip>
                </Setter.Value>
            </Setter>
        </Trigger>
    </Style.Triggers>
</Style>

当应用程序在 VS 2017 调试器中 运行 并且触发错误条件时,输出 window 中不会显示有关绑定失败或诸如此类的错误消息。

有趣的是,当存在错误情况时,控件周围会出现红色边框,即使没有自定义 updown 样式也是如此。

您没有说明您是如何绑定它的,但请记住 1) 指定 UpdateSourceTrigger 和 2) 实际上将鼠标悬停在它上面!这是一个 MCVE 显示它实际上没有问题。

XAML:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:xctk="clr-namespace:Xceed.Wpf.Toolkit;assembly=Xceed.Wpf.Toolkit"
    xmlns:local="clr-namespace:WpfApp5"
    x:Class="WpfApp5.MainWindow"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">

<Window.Resources>

    <Style TargetType="{x:Type xctk:IntegerUpDown}">
        <Setter Property="Margin" Value="5"/>

        <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="True">
                <Setter Property="ToolTip">
                    <Setter.Value>
                        <ToolTip DataContext="{Binding RelativeSource={RelativeSource Self}, Path=PlacementTarget}"
                         Background="{DynamicResource ValidationErrorBrush}">
                            <ItemsControl ItemsSource="{Binding Path=(Validation.Errors)}"
                                  DisplayMemberPath="ErrorContent"/>
                        </ToolTip>
                    </Setter.Value>
                </Setter>
            </Trigger>
        </Style.Triggers>
    </Style>

</Window.Resources>

<Window.DataContext>
    <local:SampleViewModel/>
</Window.DataContext>

<Grid>
    <xctk:IntegerUpDown Text="{Binding MyInteger, UpdateSourceTrigger=PropertyChanged}"
                        FontSize="24"
                        Width="125"
                        Height="50"/>
</Grid>