0

私はかなりの範囲を検索しましたが、このナットを割ることができないようです.

動的に変化するメイン ビューを備えたアプリがあり、これを行うには、コントロールへのバインディングを含むコンテンツ プレゼンターを使用します。

    <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>
    -->
4

1 に答える 1