그래서 모든 컨트롤과 ValidationErrorTemplate에 대한 거대한 스타일 템플릿 사전이 있습니다. 문제는 컨트롤 위에 위치가없는 경우 컨트롤 아래에 유효성 검사 오류를 표시해야한다는 것입니다. 창 위쪽의 컨트롤을 기본으로합니다. 창의 하단에있는 컨트롤의 경우 컨트롤 위에 유효성 검사가 표시되어야합니다.를 결합하는 것은 가능하다WPF ValidationErrorTemplate 스타일 동적 위치
그 이후모든 스타일 이 더 코드 숨김가 정의되어 리소스 사전과도 데이터가 없습니다.
하나의 아이디어는 AdornedElementPlaceholder
의 위치를 결정하고 템플릿을 숨기거나 표시하는 것입니다. 그러나 나는 XAML에서 그렇게 할 해결책을 찾지 못했습니다.
<ControlTemplate x:Key="ValidationErrorTemplate">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid Grid.Row="1">
<Border>
<AdornedElementPlaceholder />
</Border>
</Grid>
<AdornerDecorator Grid.Row="????">
<Border >
<!-- some style comes here ... -->
</Border>
</AdornerDecorator>
</Grid>
</ControlTemplate>
위해 Grid.Row = "????"은 컨트롤 상단에 따라 0 또는 1이어야합니다.
큰 소리, 그러나 우리는 키를 사용하여 모든 제어를위한 명시 적 스타일을 정의하지 않으 :
마지막으로 당신은 XAML의 장식에 연결된 속성을 연결해야합니다. Specialy는 프레임 워크를 개발했기 때문에 정확한 스타일 키를 추가하는 것을 잊지 않을 수 없습니다. –
DataTrigger를 사용하여 AdornedElementPlaceholder의 값에 따라 Grid.Row를 설정하는 것에 대해 생각해 보셨습니까? 나는 특별히 전에 이것을 시도한 적이 없지만 그것이 당신이 묘사하는 방식대로 작동 할 것이라고 생각합니다. – Killingsworth