自定义验证错误模板不尊重ZIndex

时间:2012-07-13 19:59:19

标签: c# wpf validation xaml datatemplate

我有一个视图定义为DataTemplate(对于“OrderEntryViewModel”),在3行网格中有Menu,ContentPresenter和Expander。 ContentPresenter的内容绑定到另一个viewModel“OrderViewModel”(其中还有另一个DataTemplate定义的视图)。扩展器的ZIndex为99,因此当它扩展为UP时,它会扩展到任何其他控件(即ContentPresenter)。

这一切都按预期工作除了ContentPresenter的内容(OrderViewModel)有数据错误...我的OrderView显示围绕带有无效数据的控件的自定义验证错误模板。当我展开扩展器时,会覆盖ContentPresenter中的所有控件,但我显示的红色边框和感叹号仍然可以通过扩展器看到!我已经验证我的扩展器的ZIndex是99而ContentPresenter是0.任何人都可以帮我这个吗?

以下是一些有助于解释的图片:

First Image显示未展开时的视图效果。

Second Image显示我展开时的观看结果。

我定义了验证错误模板,如下所示:

<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>

1 个答案:

答案 0 :(得分:3)

This solution为我工作...只是添加了与我的扩展器相同级别的AdornerDecorator,所以现在,AdornerDecorator内部的控件使用该层来显示而不是窗口中的顶级层< / p>