2016-12-20 58 views
2

System.Windows.Controls를 사용하여 ValidationRule을 보유하고 있으며이 규칙은 일부 사용자 지정 메시지를 반환합니다. 그러나 글꼴 크기가 너무 작 으면서 글꼴 크기를 어떻게 바꿀 수 있습니까?WPF에서 유효성 검사 결과의 글꼴 크기를 변경하는 방법 C#

스크린 샷 ... 여기

Textbox content and error content of validation result는 WPF 윈도우 응용 프로그램의 예제 코드는 ...

여기
public class NotEmptyValidationRule : ValidationRule 
{ 
    public override ValidationResult Validate(object value, CultureInfo cultureInfo) 
    { 
     if(value != null) 
      return string.IsNullOrWhiteSpace((value ?? "").ToString()) 
       ? new ValidationResult(false, "Field is required") 
       : ValidationResult.ValidResult; 
     return ValidationResult.ValidResult; 
    } 
} 

이다 XAML (참고 : 텍스트 상자의 태그에서 글꼴 크기를 변경하면 작동하지 않았다)

<Page... 

<TextBox 
     x:Name="txtName" 
     Grid.Row="1" 
     Grid.Column="1" 
     HorizontalAlignment="Left" 
     VerticalAlignment="Top" 
     Width="210" 
     Margin="5,0,0,0" 
     FontSize="14" 
     Style="{StaticResource MaterialDesignTextBox}"> 
    <TextBox.Text> 
     <Binding Path="RCName" UpdateSourceTrigger="PropertyChanged"> 
      <Binding.ValidationRules> 
       <local2:NotEmptyValidationRule ValidatesOnTargetUpdated="True"/> 
      </Binding.ValidationRules> 
     </Binding> 
    </TextBox.Text> 
</TextBox> 

</Page> 
+0

@Tony_KiloPapaMikeGolf 코드에서 복사 된이 WPF에서 내가 결과를 볼 수 있습니다. –

+0

@Tony_KiloPapaMikeGolf는 WPF 응용 프로그램, Windows 플랫폼입니다. – Valkyrie

+0

이상한 질문이 아닙니다. ** [Windows Presentation Foundation on the Web] (https://msdn.microsoft.com/en-us/library/aa480223.aspx) ** –

답변

2

귀하의 요구 사항에 맞게 Validation.ErrorTemplate을 수정해야합니다. MeterialDesign을 사용하고 있으므로 기존 스타일을 기준으로 TextBox에 대한 수정 된 스타일을 작성하거나 수정 된 ErrorTemplate을 작성하고 Validation.ErrorTemplate 속성을 사용하여 TextBox에 직접 적용 할 수 있습니다.

<Grid xmlns:controlzEx="clr-namespace:ControlzEx" xmlns:wpf="clr-namespace:MaterialDesignThemes.Wpf"> 
    <Grid.Resources> 
     <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" /> 
     <!-- New Validation ErrorTemplate --> 
     <ControlTemplate x:Key="ModifiedErrorTemplate"> 
      <ControlTemplate.Resources> 
       <DataTemplate DataType="{x:Type ValidationError}"> 
        <TextBlock MaxWidth="{Binding ElementName=Placeholder, 
                Path=ActualWidth}" 
           Margin="2" 
           HorizontalAlignment="Left" 
           FontSize="12" 
           Foreground="{DynamicResource ValidationErrorBrush}" 
           Text="{Binding ErrorContent}" 
           TextWrapping="Wrap" 
           UseLayoutRounding="false" /> 
       </DataTemplate> 
      </ControlTemplate.Resources> 
      <StackPanel> 
       <AdornedElementPlaceholder Name="Placeholder" /> 
       <Border Name="DefaultErrorViewer" 
         Background="{DynamicResource MaterialDesignPaper}" 
         Visibility="Collapsed"> 
        <TextBlock MaxWidth="{Binding ElementName=Placeholder, 
                Path=ActualWidth}" 
           Margin="0 2" 
           HorizontalAlignment="Left" 
           FontSize="10" 
           Foreground="{DynamicResource ValidationErrorBrush}" 
           Text="{Binding CurrentItem.ErrorContent}" 
           TextWrapping="Wrap" 
           UseLayoutRounding="false" /> 
       </Border> 
       <controlzEx:PopupEx x:Name="ValidationPopup" 
            AllowsTransparency="True" 
            IsOpen="False" 
            Placement="Bottom" 
            PlacementTarget="{Binding ElementName=Placeholder, 
                   Mode=OneWay}"> 
        <Border Background="{DynamicResource MaterialDesignPaper}"> 
         <TextBlock Margin="0 2" 
            HorizontalAlignment="Left" 
            FontSize="10" 
            Foreground="{DynamicResource ValidationErrorBrush}" 
            Text="{Binding CurrentItem.ErrorContent}" 
            TextWrapping="Wrap" 
            UseLayoutRounding="false" /> 
        </Border> 
       </controlzEx:PopupEx> 
      </StackPanel> 
      <ControlTemplate.Triggers> 
       <MultiDataTrigger> 
        <MultiDataTrigger.Conditions> 
         <Condition Binding="{Binding ElementName=Placeholder, Path=AdornedElement.(wpf:ValidationAssist.OnlyShowOnFocus)}" Value="False" /> 
         <Condition Binding="{Binding ElementName=Placeholder, Path=AdornedElement.(wpf:ValidationAssist.UsePopup)}" Value="True" /> 
         <Condition Binding="{Binding ElementName=Placeholder, Path=AdornedElement.(wpf:ValidationAssist.Suppress)}" Value="False" /> 
        </MultiDataTrigger.Conditions> 
        <MultiDataTrigger.Setters> 
         <Setter TargetName="ValidationPopup" Property="IsOpen" Value="True" /> 
        </MultiDataTrigger.Setters> 
       </MultiDataTrigger> 

       <MultiDataTrigger> 
        <MultiDataTrigger.Conditions> 
         <Condition Binding="{Binding ElementName=Placeholder, Path=AdornedElement.(wpf:ValidationAssist.OnlyShowOnFocus)}" Value="False" /> 
         <Condition Binding="{Binding ElementName=Placeholder, Path=AdornedElement.(wpf:ValidationAssist.UsePopup)}" Value="False" /> 
         <Condition Binding="{Binding ElementName=Placeholder, Path=AdornedElement.(wpf:ValidationAssist.Suppress)}" Value="False" /> 
        </MultiDataTrigger.Conditions> 
        <MultiDataTrigger.Setters> 
         <Setter TargetName="DefaultErrorViewer" Property="Visibility" Value="Visible" /> 
        </MultiDataTrigger.Setters> 
       </MultiDataTrigger> 

       <MultiDataTrigger> 
        <MultiDataTrigger.Conditions> 
         <Condition Binding="{Binding ElementName=Placeholder, Path=AdornedElement.(wpf:ValidationAssist.OnlyShowOnFocus)}" Value="True" /> 
         <Condition Binding="{Binding ElementName=Placeholder, Path=AdornedElement.(wpf:ValidationAssist.UsePopup)}" Value="True" /> 
        </MultiDataTrigger.Conditions> 
        <MultiDataTrigger.Setters> 
         <Setter TargetName="ValidationPopup" Property="IsOpen" Value="{Binding ElementName=Placeholder, Path=AdornedElement.IsKeyboardFocusWithin, Mode=OneWay}" /> 
        </MultiDataTrigger.Setters> 
       </MultiDataTrigger> 

       <MultiDataTrigger> 
        <MultiDataTrigger.Conditions> 
         <Condition Binding="{Binding ElementName=Placeholder, Path=AdornedElement.(wpf:ValidationAssist.OnlyShowOnFocus)}" Value="True" /> 
         <Condition Binding="{Binding ElementName=Placeholder, Path=AdornedElement.(wpf:ValidationAssist.UsePopup)}" Value="False" /> 
        </MultiDataTrigger.Conditions> 
        <MultiDataTrigger.Setters> 
         <Setter TargetName="DefaultErrorViewer" Property="Visibility" Value="{Binding ElementName=Placeholder, Path=AdornedElement.IsKeyboardFocusWithin, Mode=OneWay, Converter={StaticResource BooleanToVisibilityConverter}}" /> 
        </MultiDataTrigger.Setters> 
       </MultiDataTrigger> 
      </ControlTemplate.Triggers> 
     </ControlTemplate> 
     <!-- Derived TextBox Style --> 
     <Style x:Key="ExtendedMaterialDesignTextBox" 
       BasedOn="{StaticResource MaterialDesignTextBox}" 
       TargetType="TextBox"> 
      <Setter Property="Validation.ErrorTemplate" Value="{StaticResource ModifiedErrorTemplate}" /> 
     </Style> 
    </Grid.Resources> 
    <TextBox x:Name="txtName" 
      Grid.Row="1" 
      Grid.Column="1" 
      Width="210" Style="{StaticResource ExtendedMaterialDesignTextBox}" 
      Margin="5,0,0,0" 
      HorizontalAlignment="Left" 
      VerticalAlignment="Top" 
      FontSize="14"> 
     <TextBox.Text> 
      <Binding NotifyOnValidationError="True" 
        Path="RCName" 
        UpdateSourceTrigger="PropertyChanged"> 
       <Binding.ValidationRules> 
        <local:NotEmptyValidationRule ValidatesOnTargetUpdated="True" /> 
       </Binding.ValidationRules> 
      </Binding> 
     </TextBox.Text> 
    </TextBox> 
</Grid> 

이 텍스트 상자 ErrorTemplate의 스타일이 here

+0

당신은'ControlTemplate'을 텍스트 박스에 바인딩합니까? 나는 그들 사이에 어떤 관계도 볼 수 없기 때문에 많은 일들이 진행되고 있습니다. 나는 정말로 감사 할 것입니다. – FCin

+0

@FCin 게시 된 코드의 ExtendedMaterialDesignTextBox 스타일을 참조하십시오. Whee ControlTemplate (ModifiedErrorTemplate)은 TextBox의 Validation.ErrorTemplate 속성에 적용됩니다. – WPFUser

+1

@FCin, @WPFUser 'ControlTemplate'의 타의 추종을 불허하는 키 이름이라고 생각합니다. _MaterialDesignValidationErrorTemplate_은 선언을 나타내고 _ModifiedErrorTemplate_는 사용을 나타냅니다. –