2013-05-28 2 views
0
나는 다음과 같이 내 라벨 & 텍스트 상자를 표시 HeaderedContentControl을 사용하고

..XAML 국경 문제

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

I 콘텐츠 제어를위한 "블루"로 테두리 브러쉬를 사용하고 나의 콘텐츠 컨트롤 항상 파란색 테두리가 표시됩니다 . 유효성 검사 오류가 발생하면 ValidationOnDataerror를 사용하면서 머리글 내용 컨트롤의 테두리 내부에서 사용중인 텍스트 상자가 빨간색으로 변경됩니다. 이제 내 요구 사항은 유효성 검사가 발생할 때 (즉, 내부 텍스트 상자가 붉은 색으로 표시 될 때) 빨간색 테두리의 콘텐츠 테두리도 변경하는 것입니다 ...

내 컨트롤이 어떻게 채워지는지 .. 1) 내 콘텐츠 컨트롤의 테두리입니다 & (2) 내 텍스트 상자 컨트롤입니다. 내가 텍스트 상자의 색상에 따라 콘텐츠 컨트롤의 색상을 변경할 수있는 방법

... 사전에

덕분에 ...

enter image description here

답변

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> 

참고 : yo u TextBoxValidation.ValidationAdornerSiteFor Attached Property을 사용하는 다른 컨트롤에 Validation.ErrorTemplate을 표시하려고합니다. 예 : 답장을 보내

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

감사합니다. 이 스타일을 여러 컨트롤에 사용할 때 "txtName"을 사용하면 안됩니다. "txtName"을 어떻게 해당 텍스트 상자로 대체 할 수 있습니까? – devhyd

+0

그리고 여기 나는 텍스트 박스를 사용하고있을뿐 아니라 날짜 컨트롤과 콤보 박스 같은 다른 컨트롤을 사용하고있다. – devhyd