1

私は過去のアプリで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>

ViewModelにIDataErrorInfoを適切に実装し、それに応じてビューに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}" />

上記のコードは以前のアプリで正しく表示され、Textblockで確認された画像ツールチップにエラーが表示されます。

ただし、Prismを使用して構築された現在のアプリでは、画像を表示できません。TextBlockは正しく更新され、スタイルトリガーを介してTextBoxツールチップにエラーを問題なく設定できます。問題は、Adornerに表示する画像(または他のもの)を取得できないように見えることです。画像は表示されず、境界線は変更されません。

以前のアプリとこれとの違いは、ビューがContentControlのリージョンにあり、依存性注入を使用してビューモデルをビューコンストラクターに注入し、DataContextを設定したことです。

以前は機能していたのに、なぜこれが機能しないのか理解できません。どこかにAdornerDecoratorを含める必要があると思いますが、いくつかの場所で試しても成功しなかったので困惑していますAdornerが表示されるようにするにはどうすればよいですか?

4

1 に答える 1

2

AdornerDecoratorを使用して、texboxを含む要素をラップし、すべて正常に機能します。

于 2013-01-27T21:02:24.827 に答える