Проблемы с 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, и все работает нормально.

Другие вопросы по тегам