2013-04-12 2 views
3

내 바운드 속성 중 일부에 대한 유효성 검사를 수행하기 위해 을 내 ViewModel에 구현 중입니다. 나는 다음을 보여 자동으로 을 설정하려면 다음을 사용하려고 :WPF ToolTip 트리거가 작동하지 않습니다.

<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}"> 
     <Style.Triggers> 
      <Trigger Property="Validation.HasError" Value="True"> 
       <Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self},Path=(Validation.Errors)[0].ErrorContent}"/> 
       <Setter Property="ToolTip.IsOpen" Value="True"></Setter> 
       <Setter Property="ToolTip.StaysOpen" Value="True"></Setter> 
       <Setter Property="ToolTip.Placement" Value="Bottom"></Setter> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

문제는 설정하는 동안 내가 입력을 통해 내 커서를하지 않는 한이 나타나지 않는다는 것입니다. 유효성 검사가 실패하면 도구 설명을 자동으로 표시하려고합니다.

나는 데이터의 유효성을 검사하는 여러 가지 방법을 생각할 수 있지만 유선형이며 쉽게 재사용 할 수있는 솔루션을 찾고 있으며 나머지 코드 (및 UI)를 복잡하게하지 않습니다. 더 좋은 방법이있는 경우 이것을하기 위해 이드는 그것에 대해 듣기를 좋아합니다.

건배

+1

왜 'Validation.ErrorTemplate'을 사용하지 않고 장식 된 레이어로 이동하고 일반 레이아웃에는 영향을주지 않습니까? 툴팁은 실제로 버튼이나 UI의 다른 곳에있을 때 커서 강제로 텍스트 상자 오류에 대한 툴팁을 표시하면 매우 친숙하지 않습니다. – Viv

답변

1

나는 Viv에 동의합니다. 스타일에 사용되는 텍스트 상자에 대한 validation.errortemplate을 정의하기 위해 스타일을 사용했습니다. 컨트롤 아래에 오류 메시지가있는 빨간색 상자를 추가합니다. 이것을 시도하고 조정할 수 있습니다. 툴팁을 강요하는 것이 올바른 생각이라고 생각하지 않습니다. validation.errortemplate의 팝업을 사용하면 실제로 그 기능을 사용해야합니다.

<Style x:Key="FTC_ValidateTextBox" BasedOn="{x:Null}" TargetType="{x:Type TextBox}"> 
    <Setter Property="FontFamily" Value="Open Sans Condensed"/> 
    <Setter Property="FontSize" Value="19" /> 
    <Setter Property="Margin" Value="3,3,15,6"/> 
    <Setter Property="Padding" Value="10,3"/> 
    <Setter Property="TextWrapping" Value="Wrap" /> 
    <Setter Property="HorizontalAlignment" Value="Stretch" /> 
    <Setter Property="VerticalAlignment" Value="Center" /> 
    <Setter Property="Background" Value="{StaticResource DetailTextBox}" /> 
    <Setter Property="BorderBrush" Value="{StaticResource MediumGray}" /> 
    <Setter Property="BorderThickness" Value="1" /> 
    <Setter Property="Foreground" Value="Black" /> 
    <Setter Property="AllowDrop" Value="true"/> 
    <Setter Property="FocusVisualStyle" Value="{x:Null}"/> 
    <Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/> 
    <Setter Property="Stylus.IsFlicksEnabled" Value="False"/> 
    <Setter Property="Validation.ErrorTemplate"> 
     <Setter.Value> 
      <ControlTemplate> 
       <Border BorderBrush="{StaticResource MediumRed}" > 
        <Grid> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="Auto" /> 
          <RowDefinition Height="Auto" /> 
         </Grid.RowDefinitions> 
         <AdornedElementPlaceholder x:Name="parentTextBox" /> 
         <TextBlock Grid.Row="1" Style="{StaticResource DetailError}" 
          Text="{Binding AdornedElement.(Validation.Errors).CurrentItem.ErrorContent, ElementName=parentTextBox}"/> 
        </Grid> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Style.Triggers> 
     <Trigger Property="Validation.HasError" Value="true"> 
      <Setter Property="ToolTip" Value="{Binding (Validation.Errors).CurrentItem.ErrorContent, RelativeSource={x:Static RelativeSource.Self}}"/> 
      <Setter Property="BorderBrush" Value="{StaticResource MediumRed}"/> 
      <Setter Property="Foreground" Value="{StaticResource MediumRed}"/> 
      <Setter Property="Margin" Value="3,3,15,31"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 
+0

내가 장식 한 PopUp을 사용하고 있었지만 PopUps의 문제는 항상 위에 있습니다. 응용 프로그램을 전환 할 때조차도이 동작을 정말로 좋아하지 않습니다. 나는 당신의 제안을 살펴볼 것이다. 나는 나머지 코드 (혼란)에 최소한의 영향을 미쳤기 때문에 툴팁을 강요하는 것이 좋은 아이디어라고 생각했다. – rupertmulrenan

+0

adorner가 별도의 레이어에 있으므로 텍스트가 창 밖으로 나가지 않도록 장식 된 TextBox를 어떻게 포장합니까? – rupertmulrenan

+0

텍스트가 이미 스타일에 정의 된대로 줄 바꾸기입니다. 스타일 설정 도구 속성의 최대 너비를 설정하는 네드 그냥 –

관련 문제