Wpf 确保在ContentPresenter中使用AdormentDecorator,但不使用ControlTemplate

Wpf 确保在ContentPresenter中使用AdormentDecorator,但不使用ControlTemplate,wpf,contentpresenter,errortemplate,Wpf,Contentpresenter,Errortemplate,我到处找了好几遍,似乎都没办法把这个坚果弄碎 我有一个主视图可以动态更改的应用程序,为此,我使用content presenter与控件绑定: <ScrollViewer Grid.Column="2" x:Name="StepScrollViewer"> <StackPanel Margin="20,20,20,500"> <ContentPresenter Content="{Binding MainControl

我到处找了好几遍,似乎都没办法把这个坚果弄碎

我有一个主视图可以动态更改的应用程序,为此,我使用content presenter与控件绑定:

    <ScrollViewer Grid.Column="2" x:Name="StepScrollViewer">
        <StackPanel Margin="20,20,20,500">
            <ContentPresenter Content="{Binding MainControl}"/>
        </StackPanel>
    </ScrollViewer>

然后,在运行时在视图模型中更改MainControl。问题是绑定控件不能可靠地显示其错误模板。。。我怀疑这是因为这里讨论的原因:

但是这个问题的解决方案似乎对我不起作用,因为我没有在我的内容演示者周围使用控制模板。当我在我的内容演示者周围包装一个AdormentDecorator标记时,它似乎并没有解决问题。如果我在加载到contentpresenter(作为根元素)的每个控件中放置一个AdormentDecorator,它确实可以工作,但是如果可能的话,我希望避免这种重复

有什么见解吗

更新

我尝试了丹尼斯建议的这种方法,但没有用。控件绑定正常,但它的工作方式并不比当前方法好(如下所示)。注意:我以Dennis的方式将AdornerDecorator作为一个单体元素进行了尝试,并围绕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>
    -->

.....
-->

我不会直接使用
ContentPresenter
,而是使用
ContentControl
ContentControl
是包含其他元素且具有
Content
属性的控件的基类,例如
按钮

然后您可以覆盖模板,在
ContentControl
旁边有一个
AdornerDecorator
。这与您以前尝试的不同,因为现在的
ContentPresenter
装饰器属于同一视觉树

<Style TargetType="{x:Type ContentControl}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ContentControl}">
                <AdornerDecorator>
                    <ContentPresenter/>
                </AdornerDecorator>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>


编辑:忘记了
装饰解码器
需要包装容器,而不是并排坐着

如果这不起作用;让我知道,我会进一步帮助你。我已经有一段时间没有用WPF做任何事情了。我想我需要另一块与此配套的XAML。。。我可以把这种风格放在我的资源中(我讨厌WPF把这样一个功能明确的东西称为“风格”,但这是离题的),但是我如何将这种风格“应用”到滚动面板或。。。那么,我会把它应用于什么呢?那么,我该如何将其动态绑定到控件MVVM样式呢?好吧,从技术上讲,上面的工作方式并不是我想要的。我仍然需要在加载到content presenter中的每个用户控件的主体周围放置一个AdornerDecorator元素。现在,我想这就是我要做的。