Я использую MaterialDesign и элемент управления Xceed IntegerUpDown в проекте WPF. Я пытаюсь отобразить ошибки, связанные с элементом управления 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 и возникает ошибка.

Интересно, что красная рамка появляется вокруг элемента управления, когда существует условие ошибки, даже без настраиваемого стиля обновления.

1
Mark Olbert 26 Фев 2018 в 20:28

1 ответ

Лучший ответ

Вы не показали, как именно вы привязываете его, но не забудьте: 1) указать UpdateSourceTrigger и 2) фактически навести на него курсор! Вот MCVE, показывающий, что на самом деле он работает без проблем.

enter image description here

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>
2
jsanalytics 7 Мар 2018 в 23:09