Как отобразить список элементов во всплывающей подсказке?

У меня есть следующий стиль для кнопок в моем приложении

<Style x:Key="ButtonPartChooserValidation" TargetType="{x:Type Button}" BasedOn="{StaticResource ControlBaseStyle}">
    <Setter Property="Background" >
        <Setter.Value>
            <Binding Path="(Validation.Errors)" RelativeSource="{RelativeSource Self}">
                <Binding.Converter>
                    <converters:ValidationErrorsToBackgroundColorConverter/>
                </Binding.Converter>
            </Binding>
        </Setter.Value>
    </Setter>
    <Setter Property="Validation.ErrorTemplate">
        <Setter.Value>
            <ControlTemplate/>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="True">
            <Setter Property="ToolTip" Value="{Binding (Validation.Errors).[0].ErrorContent.Value[0], RelativeSource={x:Static RelativeSource.Self}}">                    
            </Setter>
        </Trigger>
        <Trigger Property="Validation.HasError" Value="False">
            <Setter Property="ToolTip" Value="Acceptable value"/>
            <Setter Property="Background" Value="White"/>
        </Trigger>
    </Style.Triggers>
</Style>

При возникновении ошибки проверки кнопка получает желтый фон, а во всплывающей подсказке отображается первый элемент в списке ошибок. Желтый фон - это то, чего я пытаюсь достичь, но я хотел бы отобразить полный список ошибок валидации, а не только первый. Я попробовал следующее и только что получил пустой список (только Триггер сверху для краткости, имена совпадают).

<Trigger Property="Validation.HasError" Value="True">
    <Setter Property="ToolTip">
        <Setter.Value>
            <ListBox ItemsSource="{Binding (Validation.Errors).[0].ErrorContent.Value, RelativeSource={x:Static RelativeSource.Self}}">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Label Content="{Binding ErrMsg}" />
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        </Setter.Value>
    </Setter>
</Trigger>

Мне почти наверняка понадобятся два элемента ListBox для отображения каждого из списков в моем объекте, но на данный момент я даже не могу заставить его работать. Что я настраиваю неправильно?

1 ответ

Решение

Вы можете привязать к вложенному свойству Validation.Errors объекта PlacementTarget всплывающей подсказки:

<Setter Property="ToolTip">
    <Setter.Value>
        <ToolTip>
            <ItemsControl ItemsSource="{Binding Path=PlacementTarget.(Validation.Errors), RelativeSource={RelativeSource AncestorType=ToolTip}}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding ErrorContent}" />
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </ToolTip>
    </Setter.Value>
</Setter>
Другие вопросы по тегам