0

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>

コンテンツ コントロールの「青」としてボーダー ブラシを使用しているため、コンテンツ コントロールは常に青い境界線で表示されます。検証エラーが発生すると、ValidationOnDataerror を使用しているため、ヘッダー付きコンテンツ コントロールの境界線内で使用しているテキスト ボックスが赤に変わります。今、私の要件は、検証が発生したときに(つまり、内側のテキストボックスが赤色の場合)、コンテンツの境界線も赤色に変更することです...

私は自分のコントロールがどのように入力されているかを画像に添付しています..(1)はコンテンツコントロールの境界線であり、(2)はテキストボックスコントロールです。

テキストボックスの色に基づいてコンテンツコントロールの色を変更するにはどうすればよいですか...

前もって感謝します...

ここに画像の説明を入力

4

1 に答える 1

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.ValidationAdornerSiteFor Attached Propertyを使用するValidation.ErrorTemplate以外のコントロール を表示する場合。例えばTextBox

<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>
于 2013-05-28T21:37:07.113 に答える