私はかなりの範囲を検索しましたが、このナットを割ることができないようです.
動的に変化するメイン ビューを備えたアプリがあり、これを行うには、コントロールへのバインディングを含むコンテンツ プレゼンターを使用します。
<ScrollViewer Grid.Column="2" x:Name="StepScrollViewer">
<StackPanel Margin="20,20,20,500">
<ContentPresenter Content="{Binding MainControl}"/>
</StackPanel>
</ScrollViewer>
次に、View Model で実行時に MainControl を変更します。問題は、バインドされたコントロールがエラーテンプレートを確実に表示しないことです...ここで説明した理由によると思われます:
Validation ErrorTemplate がデータ エラーに表示されない
しかし、コンテンツ プレゼンターでコントロール テンプレートを使用していないため、この問題の修正はうまくいかないようです。コンテンツ プレゼンターを AdornmentDecorator タグで囲んでも、問題が解決しないようです。contentpresenter に (ルート要素として) ロードする各コントロール内に AdornmentDecorator を配置すると機能しますが、可能であればこの繰り返しを避けたいと思います。
洞察はありますか?
アップデート
デニスが提案したこのアプローチを試しましたが、役に立ちませんでした。コントロールは正常にバインドされますが、現在のアプローチよりもうまく機能しません (下のコメントにも示されています)。注: 以下に示すように、AdornerDecorator を Dennis のようにシングルトン要素として使用し、ContentPresenter を囲むように試しました。どちらも違いはありません - MainControl バインディングが変更されると、コントロールの周りの装飾はすべて消えます。
<UserControl.Resources>
<Style x:Key="MainContentControl" TargetType="{x:Type ContentControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ContentControl}">
<Grid>
<AdornerDecorator>
<ContentPresenter Content="{Binding MainControl}"/>
</AdornerDecorator>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Grid>
.....
<ScrollViewer Grid.Column="2" x:Name="StepScrollViewer">
<StackPanel Margin="20,20,20,500" >
<ContentControl Style="{StaticResource MainContentControl}"/>
</StackPanel>
</ScrollViewer>
<!-- THE BELOW WORKS IF I SURROUND EACH BOUND CONTROL WITH adornerdecorator -->
<ScrollViewer Grid.Column="2" x:Name="StepScrollViewer">
<StackPanel Margin="20,20,20,500">
<ContentPresenter Content="{Binding MainControl}"/>
</StackPanel>
</ScrollViewer>
-->