Проблемы с WPF IDataErrorInfo
Я использовал WPF и IDataErrorInfo в прошлых приложениях, чтобы отображать пользователю ошибки с помощью шаблона элемента управления, помещая изображение в рекламный блок и добавляя к изображению всплывающую подсказку;
<Style x:Key="textStyle" TargetType="TextBox">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<DockPanel LastChildFill="True">
<Border BorderBrush="Orange"
BorderThickness="2"
CornerRadius="4"
SnapsToDevicePixels="True">
<Border.Effect>
<DropShadowEffect BlurRadius="10"
ShadowDepth="0"
Color="Orange" />
</Border.Effect>
<DockPanel>
<Image Width="16"
Height="16"
Margin="-20,0,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
RenderOptions.BitmapScalingMode="HighQuality"
Source="{StaticResource imgError}"
ToolTip="{Binding ElementName=adornedElement,
Path=AdornedElement.(Validation.Errors).CurrentItem.ErrorContent}"
ToolTipService.ShowDuration="30000" />
<AdornedElementPlaceholder Name="adornedElement" />
</DockPanel>
</Border>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
При соответствующей реализации IDataErrorInfo в ViewModel и установке Textbox в представлении соответственно отображаются изображение и всплывающая подсказка;
<TextBox Name="txt"
Grid.Column="0"
Height="40"
Background="Aqua"
Style="{StaticResource textStyle}"
Text="{Binding Path=Text,
UpdateSourceTrigger=PropertyChanged,
ValidatesOnDataErrors=True}" />
<TextBlock Grid.Column="1"
Height="40"
Background="AliceBlue"
Text="{Binding ElementName=txt,
Path=(Validation.Errors).CurrentItem.ErrorContent}" />
Приведенный выше код корректно отображается в моих предыдущих приложениях и показывает ошибку в подсказке к изображению, что подтверждается текстовым блоком.
Однако в моем текущем приложении, построенном с использованием Prism, я не могу отобразить изображение. TextBlock обновляется правильно, и я могу установить ошибку для всплывающей подсказки TextBox через триггер стиля без каких-либо проблем. Проблема в том, что я не могу получить изображение (или что-то еще) для отображения в Adorner. Изображение не отображается и граница не изменяется.
Разница между предыдущими приложениями и этим заключается в том, что представление находится в Region в ContentControl, и я использовал внедрение зависимостей, чтобы внедрить модель представления в конструктор представления и установить DataContext.
Я не могу понять, почему это не работает, когда это было раньше. Я думаю, что мне может понадобиться включить AdornerDecorator где-нибудь, но я озадачен тем, где я попробовал его в нескольких местах без успеха. Любые идеи, как я могу обеспечить показ Adorner?
1 ответ
Использовал AdornerDecorator, чтобы обернуть элемент, содержащий texbox, и все работает нормально.