2013-03-27 7 views
3

저는 WPF을 처음 사용합니다. TextBox에 오류가 발생하면 사용자 지정 도구 설명을 표시하려고합니다. 코드 위툴팁이 제대로 표시되지 않습니다.

<Style x:Key="textBoxInError" TargetType="{x:Type TextBox}"> 
     <Style.Triggers> 
      <Trigger Property="Validation.HasError" Value="true">     
       <Setter Property="ToolTip"> 
        <Setter.Value> 
         <ToolTip Placement="Top">        
          <Border Margin="-4,0,-4,-3" Padding="2" Background="Red"> 
           <Border.BitmapEffect> 
            <OuterGlowBitmapEffect></OuterGlowBitmapEffect> 
           </Border.BitmapEffect> 
           <Label Foreground="White" FontWeight="Bold" Content="{Binding RelativeSource={RelativeSource AncestorType={x:Type TextBox}}, Path=(Validation.Errors)[0].ErrorContent}"></Label> 
          </Border> 
         </ToolTip> 
        </Setter.Value> 
       </Setter> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

ToolTip에 오류 메시지가 표시되지 : 아래 그림과 같이 그래서 나는 Style을 사용하고 있습니다. 이 점을 도와 주시겠습니까? 어떤 도움이라도 매우 높습니다.

답변

2

당신은 다음 스타일 (msdn)와 현재의 스타일을 변경해야합니다

<Style x:Key="textBoxInError" TargetType="{x:Type TextBox}"> 
    <Style.Triggers> 
     <Trigger Property="Validation.HasError" Value="true"> 
      <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

그리고 당신은 ToolTip을위한 스타일을 만들어야합니다 사용의

<Style TargetType="ToolTip"> 
    <Setter Property="OverridesDefaultStyle" Value="true"/> 
    <Setter Property="HasDropShadow" Value="True"/> 
    <Setter Property="Placement" Value="Top" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="ToolTip"> 
       <Border Name="Border" Margin="-4,0,-4,-3" Padding="2" Background="Red"> 
        <Border.BitmapEffect> 
         <OuterGlowBitmapEffect></OuterGlowBitmapEffect> 
        </Border.BitmapEffect> 
        <ContentPresenter 
         Margin="4" 
         HorizontalAlignment="Left" 
         VerticalAlignment="Top" 
         TextElement.Foreground="White" TextElement.FontWeight="Bold"          
         />          
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="HasDropShadow" Value="true"> 
         <Setter TargetName="Border" Property="CornerRadius" Value="4"/> 
         <Setter TargetName="Border" Property="SnapsToDevicePixels" Value="true"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

예 :

<TextBox Text="{Binding MyText, ValidatesOnDataErrors=True, NotifyOnValidationError=True, UpdateSourceTrigger=PropertyChanged}" 
     Style="{StaticResource textBoxInError}"      
     /> 
1

도 교체해야합니다. 유효성 검증 오류가없는 경우

Path=(Validation.Errors).CurrentItem.ErrorContent} 

Path=(Validation.Errors)[0].ErrorContent 

때문에 귀하의 경우 당신은 침묵 ArgumentOutOfRangeException를 얻을 수 있습니다. IDataErrorInfo 또는 INotifyDataErrorInfo를 구현하는 것을 잊지 마십시오.

+0

감사합니다. 당신의 도움을 주셔서 감사합니다:) – user2216584

관련 문제