Xaml边界问题

时间:2013-05-28 20:48:21

标签: wpf xaml wpf-controls

我正在使用HeaderedContentControl来显示我的标签&文本框如下..

<Style x:Key="ContentBorderStyle" TargetType="Border">
        <Setter Property="BorderBrush" Value="Blue"/>
</Style>

<Style TargetType="HeaderedContentControl" x:Key="BaseLabeledItemStyle">
        <Style.Setters>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="HeaderedContentControl">
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition />
                                <ColumnDefinition />
                            </Grid.ColumnDefinitions>
                            <Border Grid.Column="0">
                                <ContentPresenter Name="header"        
                                                            Content="{TemplateBinding Header}"/>
                            </Border>
                            <Border Grid.Column="1"
                                    Style="{StaticResource ContentBorderStyle}">
                                <AdornerDecorator>
                                    <ContentPresenter Name="content"                                         
                                                  Content="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Content}"/>
                                </AdornerDecorator>
                            </Border>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style.Setters>
  </Style>

<HeaderedContentControl
                Style="{StaticResource ResourceKey=BaseLabeledItemStyle}" 
                Header="Emp Name">
                <!--<ContentControl>-->
                <TextBox x:Name="txtName" 
                         Text="{Binding Path=EmpName, Mode=TwoWay, ValidatesOnDataErrors=True}"/>
            </HeaderedContentControl>

因为我使用边框画笔作为内容控件的“蓝色”我的内容控件始终显示蓝色边框。当出现验证错误时,我在Headered内容控件边框内使用的文本框将变为红色,因为我使用的是ValidationOnDataerror。现在我的要求是在验证发生时(即内部文本框为红色时)在红色中更改内容边框...

我正在附加一张Image我的控件是如何填充的......因为(1)是我的内容控件的边框。 (2)是我的文本框控件。

如何根据文本框颜色更改内容控件的颜色...

提前感谢...

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以使用DataTrigger进行其他突出显示

<Style x:Key="ContentBorderStyle" TargetType="Border">
    <Setter Property="BorderBrush" Value="Blue"/>
    <Style.Triggers>
        <DataTrigger Binding="{Binding (Validation.HasError), ElementName=txtName}" Value="True">
            <Setter Property="BorderBrush" Value="Red"/>                    
        </DataTrigger>
    </Style.Triggers>
</Style>

<强>供参考: 如果您想在Validation.ErrorTemplate使用Validation.ValidationAdornerSiteFor Attached Property之外的任何其他控件上显示TextBox。 e.g。

<HeaderedContentControl Validation.ValidationAdornerSiteFor="{Binding ElementName=txtName}"

<Style x:Key="ContentBorderStyle" TargetType="Border">
    <Setter Property="BorderBrush" Value="Blue"/>
    <Setter Property="Validation.ValidationAdornerSiteFor" Value="{Binding ElementName=txtName}"/>
</Style>