Как отобразить список элементов во всплывающей подсказке?
У меня есть следующий стиль для кнопок в моем приложении
<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>