4
해당 모델/VM에 설정된 유효성 검사 규칙에 따라 오류 메시지를 표시하거나 축소하는 텍스트 상자를 만들었습니다. 코드는 전을 위해 이메일을 다음과 같이 간다 : 나는 이들의 무리를 가지고 있기 때문에, 나는 일반적인 리소스 파일에서이 컨트롤 템플릿이 모두 넣어 재배치 좋아했을WPF 컨트롤 템플릿의 중첩 바인딩
<StackPanel Grid.Row="3" Grid.Column="1">
<TextBox MaxLength="200" x:Name="mailTextBox"
Style="{StaticResource SectionEditPropertyTextBox}"
Text="{Binding Email, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />
<ContentPresenter Visibility="{Binding ElementName=mailTextBox, Path=(Validation.HasError), Converter={StaticResource BooleanToVisibilityConverter}, ConverterParameter=True }"
Content="{Binding ElementName=mailTextBox, Path=(Validation.Errors).CurrentItem}"
HorizontalAlignment="Left">
<ContentPresenter.ContentTemplate>
<DataTemplate>
<Label Style="{StaticResource SectionEditErrorLabel}" Content="{Binding Path=ErrorContent}"/>
</DataTemplate>
</ContentPresenter.ContentTemplate>
</ContentPresenter>
</StackPanel>
.
내 템플릿은 다음과 같습니다
<ControlTemplate x:Key="FormTextBox" TargetType="{x:Type TextBox}">
<StackPanel Grid.Row="{TemplateBinding Grid.Row}" Grid.Column="{TemplateBinding Grid.Column}">
<TextBox x:Name="validableText" MaxLength="{TemplateBinding MaxLength}"
Style="{StaticResource SectionEditPropertyTextBox}"
Text="{TemplateBinding Text}" />
<ContentPresenter Visibility="{Binding ElementName=validableText, Path=(Validation.HasError), Converter={StaticResource BooleanToVisibilityConverter}, ConverterParameter=True }"
Content="{Binding ElementName=validableText, Path=(Validation.Errors).CurrentItem}"
HorizontalAlignment="Left">
<ContentPresenter.ContentTemplate>
<DataTemplate>
<Label Style="{StaticResource SectionEditErrorLabel}" Content="{Binding Path=ErrorContent}"/>
</DataTemplate>
</ContentPresenter.ContentTemplate>
</ContentPresenter>
</StackPanel>
</ControlTemplate>
나는 이런 식으로 링크 : 어떻게 든 파괴해야 바인딩 있도록
<TextBox Grid.Row="3" Grid.Column="1" MaxLength="200" Template="{StaticResource FormTextBox}"
Text="{Binding Email, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />
불행히도, 어떤 유효성 검사를 수행하지 않습니다 ..
감사합니다. StackPanel
어쨌든 Grid
의 직접적인 자식 없기 때문
정말 고마워요! 여러분의 코드와 마찬가지로 작은 경계선이 있습니다. adorner가 전체 stackpanel 주위에있을 것입니다. 그러나 바인딩이 어떻게 작동하는지 이해할 수 있었고 완벽하게 작동하는 데 유효 할 수있었습니다! – karlipoppins