2

3行グリッド内にMenu、ContentPresenter、およびExpanderを持つDataTemplate( "OrderEntryViewModel"の場合)として定義されたビューがあります。ContentPresenterのコンテンツは、別のviewModel "OrderViewModel"(別のDataTemplate定義のビューがあります)にバインドされます。エクスパンダのZIndexは99であるため、UPに拡張すると、他のコントロール(ContentPresenterなど)の上に拡張されます。

ContentPresenterのコンテンツ(OrderViewModel)にデータエラーがある場合を除いて、これはすべて期待どおりに機能します...私のOrderViewは、無効なデータを持つコントロールの周りにカスタム検証エラーテンプレートを表示します。エキスパンダーを展開すると、ContentPresenter内のすべてのコントロールがカバーされますが、表示されている赤い境界線と感嘆符は、エキスパンダーを通して引き続き表示されます。エクスパンダのZIndexが99で、ContentPresenterのZIndexが0であることを確認しました。誰かがこれを手伝ってくれますか?

説明に役立つ画像を次に示します。

最初の画像は、展開されていないときのビューがどのように見えるかを示しています。

2番目の画像は、展開したときのビューがどのように見えるかを示しています。

検証エラーテンプレートを次のように定義します。

<ControlTemplate x:Key="ValidationErrorTemplate">
    <DockPanel LastChildFill="true">
        <Border Background="Red" DockPanel.Dock="right" Margin="5,0,0,0" Width="10" Height="10" CornerRadius="5" 
                ToolTip="{Binding AdornedElement.(Validation.Errors).CurrentItem.ErrorContent, ElementName=customAdorner}">
            <TextBlock Text="!" VerticalAlignment="center" HorizontalAlignment="center" FontWeight="Bold" Foreground="White"/>
        </Border>
        <AdornedElementPlaceholder x:Name="customAdorner" VerticalAlignment="Center">
            <Border BorderBrush="red" BorderThickness="1" />
        </AdornedElementPlaceholder>
    </DockPanel>
</ControlTemplate>

そして、それを次のような特定のコントロールに割り当てます(これが、TextBoxに対して行う方法です)。

<Style TargetType="{x:Type TextBox}" x:Key="ValidatedStyleTextBox">
    <Style.Triggers>
        <DataTrigger Binding="{Binding IsLocked}" Value="True">
            <Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding IsLocked}" Value="False">
            <Setter Property="Validation.ErrorTemplate" Value="{StaticResource ValidationErrorTemplate}"/>
        </DataTrigger>
    </Style.Triggers>
</Style>
4

1 に答える 1

3

このソリューションは私にとってはうまくいきました...エキスパンダーと同じレベルにAdornerDecoratorを追加しただけなので、AdornerDecorator内のコントロールは、ウィンドウの最上位レイヤーの代わりにそのレイヤーを使用して表示します

于 2012-07-17T13:11:24.460 に答える